从 C++ 中的二进制文件中读取 32 位整数?

Read 32-bit integer from binary file in C++?

我的二进制文件是这样的。

00000000: 0000 0803 0000 ea60 0000 001c 0000 001c
00000010: 0000 0000 0000 0000 0000 0000 0000 0000

左栏是地址。

我只是尝试阅读 0000 0803(=2051) 如下

ifstream if;
if.open("file");
uint32_t a;
if >> a;

不出所料...它没有用 :-(
a执行后为0。
我试过了long, int, unsigned int, unsigned long。都失败了。

为什么这些都不起作用,我该如何实现目标?

您有两个问题:

  1. 确保您从流中读取您想要的字节(不多也不少)。

    我推荐这种语法:

    uint32_t a;

    inFILE.read(reinterpret_cast<char *>(&a), sizeof(a));

  2. 确保您以正确的字节顺序解释这些字节。

    问:如果您使用的是 PC,您的 CPU 可能是 little endian。你知道你的数据流是小端还是大端吗?

    如果数据是大端,我会考虑标准网络函数来适应字节顺序:ntohl(),等等:http://www.retran.com/beej/htonsman.html

另外:

遵循 Hcorg 和 Daniel Jour 的建议:不要忘记 "open mode" 参数,也不要忘记检查 "file open" 错误。

以二进制模式打开文件,然后使用read()方法,类似于:

uint32_t a;
ifstream file ("file", ios::in | ios::binary);
if (file.is_open())
{
     file.read ((char*)&a, sizeof(a));
}