我在讀二進制文件。前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