【发布时间】:2015-11-11 00:19:06
【问题描述】:
我的二进制文件如下所示。
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。都失败了。
为什么这些不起作用,我该如何实现目标?
【问题讨论】:
-
您检查文件是否打开正确?读取后流的状态是什么? (失败还是坏状态?)
-
记住打开模式 - 打开的第二个参数 (en.cppreference.com/w/cpp/io/ios_base/openmode)。
-
并且您需要知道保存文件时使用的字节顺序。 Little-endian(例如 Intel x86):最低地址上的最低有效字节,Big-endian(例如互联网):最低地址上的最高有效字节。
-
如果您在 Intel PC 上从 LeCun 读取 MNIST 图像数据集,那么您需要反转字节顺序,如 @ErikAlapää 所述。
-
@plhn 只是一个旁注:也许
if不是您的ifstream变量的有效名称...