Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Leer de archivo numero de bits determinado

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Leer de archivo numero de bits determinado Responder citando

Hola a todos..me gustaria poder leer de una archivo un numero de bits determinado. De momento se me ha ocurrido hacer lo siguiente:
Código:

FILE *Archivo;
TBits *Bits;

Archivo = fopen(FileName, "rb");
Bits = new TBits;
Bits->size = NumeroBitsaLeer;

fread(&Bits,sizeof(Bits),1,Archivo);


Hasta este pounto todo va perfecto..pero cuando intento extraer le contenido de cada bit me da error

bool Prueba = Bits->Bits[n];

Alguien sabe otra forma o lo que estoy haciendo mal. Muchas gracias

Argone
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Cuando haces sizeof(Bits) fíjate que Bits es un puntero, por lo que el tamaño que te esta devolviendo es el del puntero. Otro detalle es cuando le pasas el puntero de una clase que ni sabes donde va a cargar los bytes que lees etc...

Puedes usar la siguiente clase para leer un archivo bit a bit y saber cuantos bits contiene. Solo funciona en modo lectura, aunque no costaría mucho que fuese también de escritura:
Código:
#include <memory>

class TBitsFile
{
    std::auto_ptr<TFileStream> fs;

public:
    TBitsFile(String filename)
        : fs(new TFileStream(filename, fmOpenRead)) { };

    __int64 GetSize(void) { return fs->Size * 8; };

    bool operator[](__int64 indice)
    {
        if (indice < GetSize())
        {
            fs->Position = indice / 8;
            BYTE by;
            fs->Read(&by, sizeof(by));
            return (by >> (indice % 8)) & 1;
        }
        else
            throw ERangeError("Fuera de rango.");
    }
};


Para usarla:
Código:
// Abrimos el archivo:
TBitsFile fbit("c:\\prueba.txt");

// Averiguamos cuantos bits contiene el archivo:
int numBits = fbit.GetSize();

// Leemos el bit 0:
bool bit0 = fbit[0];


Y el orden en que lee los bits:
Código:
Suponiendo que tenemos un archivo
que contiene 3 bytes: "ABC"

  |<-- C --|<-- B --| <- A --|
  | 01000011 01000010 01000001
  |--------|--------|--------|
  |       Bit16    Bit8      |
 Bit23 <<       <<      <<  Bit0


Espero que te sirva. Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchas gracias Leo, tomo nota...

Argone
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.