txt sirve que para manejo lenguaje leer guardar ejercicios datos binarios archivos archivo c++ c binary binaryfiles

sirve - ¿Cómo leer pequeños enteros endian del archivo en C++?



manejo de archivos en c pdf (3)

Digamos que tengo un archivo binario; contiene números binarios positivos, pero escritos en little endian como enteros de 32 bits

¿Cómo leo este archivo? Tengo esto ahora.

int main() { FILE * fp; char buffer[4]; int num = 0; fp=fopen("file.txt","rb"); while ( fread(&buffer, 1, 4,fp) != 0) { // I think buffer should be 32 bit integer I read, // how can I let num equal to 32 bit little endian integer? } // Say I just want to get the sum of all these binary little endian integers, // is there an another way to make read and get sum faster since it''s all // binary, shouldnt it be faster if i just add in binary? not sure.. return 0; }


De CodeGuru :

inline void endian_swap(unsigned int& x) { x = (x>>24) | ((x<<8) & 0x00FF0000) | ((x>>8) & 0x0000FF00) | (x<<24); }

Entonces, puedes leer directamente en unsigned int y luego simplemente llamar a esto.

while ( fread(&num, 1, 4,fp) != 0) { endian_swap(num); // conversion done; then use num }


Si está utilizando Linux, debería mirar aquí ;-)

Se trata de funciones útiles como le32toh


Esta es una forma de hacerlo que funciona en arquitecturas big-endian o little-endian:

int main() { unsigned char bytes[4]; int sum = 0; FILE *fp=fopen("file.txt","rb"); while ( fread(bytes, 4, 1,fp) != 0) { sum += bytes[0] | (bytes[1]<<8) | (bytes[2]<<16) | (bytes[3]<<24); } return 0; }