我在读二进制文件。前16位表示数组索引,接下来的16位表示将要列出的16位项目的数量,然后剩余的16位表示所有这些16位项目。例如,文件“程序”的以下己转储:从二进制文件中反复fread()16位
30 00 00 02 10 00 F0 25
表示索引0x3000处,具有以下0×0002元素,这些元素为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. – MYMNeo 2013-04-25 04:01:58
哎呀,它应该是'rb'。但是,即使发生了这种变化,它仍然在发生。 – Walker 2013-04-25 04:06:41
您正在将2个字节读入字符。创建indexChar和nItemsChar char [2]。 – Duck 2013-04-25 04:19:02