【发布时间】:2012-10-04 06:57:29
【问题描述】:
我正在尝试从二进制文件中读取字节,但没有成功。 我尝试了很多解决方案,但没有得到任何结果。 文件结构:
[offset] [type] [value] [description]
0000 32 bit integer 0x00000803(2051) magic number
0004 32 bit integer 60000 number of images
0008 32 bit integer 28 number of rows
0012 32 bit integer 28 number of columns
0016 unsigned byte ?? pixel
0017 unsigned byte ?? pixel
........
xxxx unsigned byte ?? pixel
我是如何尝试的(不起作用):
auto myfile = fopen("t10k-images.idx3-ubyte", "r");
char buf[30];
auto x = fread(buf, 1, sizeof(int), myfile);
【问题讨论】:
-
它说“MSB first”的部分有点重要。
-
“没有成功”是什么意思?我相信这应该将 sizeof(int) 字节读入缓冲区。您应该在读取后检查 x 以确保它等于 x == sizeof(int)。尝试将缓冲区打印为十六进制,看看它是否正确读取。
-
我猜问题是字节序。如果磁盘上的
ints 是大端,而系统是小端,那么数字将不匹配。 -
具有讽刺意味的是,我是在像你一样无法阅读 MNIST 手写数字数据库后来到这里的。