我正在读取一个二进制文件。前 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。我究竟做错了什么?