我的二进制文件看起来像这样.
00000000: 0000 0803 0000 ea60 0000 001c 0000 001c
00000010: 0000 0000 0000 0000 0000 0000 0000 0000
Run Code Online (Sandbox Code Playgroud)
左栏是地址.
我只是尝试阅读0000 0803(= 2051)如下
ifstream if;
if.open("file");
uint32_t a;
if >> a;
Run Code Online (Sandbox Code Playgroud)
正如预期的那样......它不起作用:-(
a执行后只是0.
我试过long, int, unsigned int, unsigned long.都失败了.
为什么这些不起作用,我怎样才能实现目标?
pau*_*sm4 27
你有两个问题:
确保您从流中读取您想要的字节(不少,不多).
我推荐这种语法:
uint32_t a;
inFILE.read(reinterpret_cast<char *>(&a), sizeof(a));
确保您使用正确的字节顺序解释这些字节.
问:如果你在PC上,你的CPU可能是小端.你知道你的数据流是否也是小端的,还是大端?
如果数据是big-endian,我会考虑标准网络功能以适应字节顺序:ntohl()等等:http://www.retran.com/beej/htonsman.html
也:
按照Hcorg和Daniel Jour的建议:不要忘记"打开模式"参数,不要忘记检查"文件打开"错误.
以二进制模式打开文件,然后使用read()方法,例如:
uint32_t a;
ifstream file ("file", ios::in | ios::binary);
if (file.is_open())
{
file.read ((char*)&a, sizeof(a));
}
Run Code Online (Sandbox Code Playgroud)