【发布时间】:2013-04-18 20:06:55
【问题描述】:
我正在读取一个二进制文件。前 16 位代表一个数组索引,接下来的 16 位代表即将列出的 16 位项目的数量,然后剩下的 16 的倍数代表所有这些 16 位项目。例如,以下文件“程序”的十六进制转储:
30 00 00 02 10 00 F0 25
表示索引0x3000,后面跟着0x0002个元素,分别是0x1000和0xF025。
FILE *fp = fopen(program, "rb");
char indexChar, nItemsChar;
u_int16_t index, nItems;
fread (&indexChar, 2, 1, fp);
fread (&nItemsChar, 2, 1, fp);
address = strtol(&indexChar, NULL, 16);
nItems = strtol(&nItemsChar, NULL, 16);
for (u_int16_t i = 0; i < nItems; ++i)
{
fread (state->mem + index + i, 2, 1, fp);
}
我什至不确定这种方法是否有效,因为我在尝试 fRead() 进入 nItemsChar 时得到 EXC_BAD_ACCESS。我做错了什么?
【问题讨论】:
-
用二进制模式'rb'打开它。并且读取大小是 sizeof(u_int16_t) 计数 1 不是读取大小 2 计数 1。
-
哎呀,应该是'rb'。但是,是的,即使发生了这种变化,它仍在发生。
-
您正在将 2 个字节读入字符。将 indexChar 和 nItemsChar 设为 char[2]。