c++ - 如何从 C++ 文件中读取大端整数?

标签 c++

<分区>

假设我有一个二进制文件;它包含正二进制数,但以 32 位整数的大端形式书写

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

int main() {
    FILE * fp;
    char buffer[4];
    int num = 0;
    fp=fopen("file.bin","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 big endian integer?
    }
    return 0;
}

最佳答案

将您的缓冲区声明为:

unsigned char buffer[4];

您可以使用它来转换字节顺序:

int num = (int)buffer[0] | (int)buffer[1]<<8 | (int)buffer[2]<<16 | (int)buffer[3]<<24;

顺便说一下

当然,这适用于小端的 x86 架构 - 否则您的平台字节序可能与您的文件的字节序相匹配,因此无需转换。这样您就可以直接读入您的 int 而无需转换。

关于c++ - 如何从 C++ 文件中读取大端整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751130/

相关文章:

c++ - 使用 pThreads 在线程之间共享 3D 数组

c++ - 搜索/替换 boost 正则表达式 C++

c++ - 为什么 set<string>::iterator 不能作为 map 的 key?

C++ 编译器不检查模板类中是否存在方法

c++ - 生成文件错误 : No such file or directory

c++ - 如果我将可变 lambda 作为 const 引用传递给函数,会发生什么情况?

c++ - 连接 LPWSTR 字符串

c++ - 递归到迭代的转换

c++ - 如何确定要为体系结构启用或禁用的功能标志

c++ - C++ 中的 Fork() 和 Execl(),Execl() 失败