Tratamiento de bits en C#

24/05/2004 - 13:25 por Derfel | Informe spam
Hola a todos/as
Tengo que hacer un programa que interprete un fichero binario, este fichero
está compuesto por líneas de 139 bytes donde cada línea tiene:
8 bytes: Indican el número de elementos
6 bytes: Indican el año
20 bytes: El tiempo en minutos
8 bytes: Valor de entrada
4 bytes: Número de entradas
1 byte: Validez
32 bytes:
32 bytes:
6: bytes
y así sucesivamente.
¿Alguien puede darme una idea de cómo interpretar esto?, ahora leo cada línea
como un array de bytes, pero no se como coger los 20 bytes del tiempo o los 4
del número de entradas. ¿Existe en C# alguna clase o utilidad que permita
convertir en bits y leer sólo la parte que se necesite (por ejemplo
linea.get_bits(6)?

Gracias y un saludo

Derfel

"De todas las cosas que se pueden
hacer con un ordenador,la más inútil
es la más divertida"
 

Leer las respuestas

#1 Derfel
24/05/2004 - 17:40 | Informe spam
Derfel escribió en news::

Hola a todos/as
Tengo que hacer un programa que interprete un fichero binario, este
fichero está compuesto por líneas de 139 bytes donde cada línea tiene:
8 bytes: Indican el número de elementos
6 bytes: Indican el año
20 bytes: El tiempo en minutos
8 bytes: Valor de entrada
4 bytes: Número de entradas
1 byte: Validez
32 bytes:
32 bytes:
6: bytes
y así sucesivamente.



Ya lo he resuelto con la siguiente clase (sacada de una respuesta del grupo
de python):

public class bitter
{
private byte[] datos;
private int bit;
private int idx;

public bitter(byte[] data)
{
datos = data;
bit = 0;
idx = 0;
}

public int get_bits(int count)
{
if(count == 0) return 0;
if(datos == null) return 0;
if(datos.Length == 0) return 0;

int val = 0;

for(int i=0; i<count; i++)
{
if(idx == datos.Length)
return 0;

val <<= 1;
int shifted = datos[idx] >> (8 - bit - 1);
val |= (shifted & 1);
bit += 1;
if(bit == 8)
{
idx ++;
bit = 0;
}
}
return val;
}
}

la forma de usarla es:
bitter bt = new bitter(bytes);
int num = bt.get_bits(8);
int anyo = bt.get_bits(6)


Salu2
Derfel

"De todas las cosas que se pueden
hacer con un ordenador,la más inútil
es la más divertida"

Preguntas similares