如何在C ++中从文件中读取小端整数?

说我有一个二进制文件; 它包含正二进制数,但以小端编写为32位整数

我该如何阅读此文件? 我现在有这个。

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; } 

这是一种适用于big-endian或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; } 

如果你使用的是linux,你应该看看这里 😉

它是关于有用的function,如le32toh

来自CodeGuru :

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

因此,您可以直接读取unsigned int ,然后调用它。

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