如何从 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;
}

原文由 user1713700 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 571
2 个回答

这是一种适用于大端或小端架构的方法:

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

原文由 Vaughn Cato 发布,翻译遵循 CC BY-SA 3.0 许可协议

来自 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
}

原文由 Reunanen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题