我有一個帶有一些測試數據的文件,"abcde"
。我想從它讀取數據到一個uint16_t
緩衝區中,一次一個字節(我對數據的含義不感興趣,只是它對於校驗和的二進制表示),但最終的"e"
沒有被讀取:fread循環不讀取所有字節,爲什麼字節被反轉?
FILE *fp = fopen(filepath, "rb");
uint16_t buffer[1];
while (fread(buffer, sizeof(uint16_t), 1, fp) != 0) {
printf("0x%x\n", *(buffer));
}
輸出:
0x6261
0x6463
如果uint8_t
類型被使用,則輸出爲:
0x61
0x62
0x63
0x64
0x65
我試圖reversin g size
和nmemb
參數至fread
(例如, while (fread(buffer, 1, 2, fp) != 0)
但得到:
0x6261
0x6463
0x6465
這可能是所有的最小的幫助!使用uint16_t
時(但沒有最後一個例子的重複數據)
- 我應該如何調用
fread
閱讀所有字符:這給我留下了2分主要的問題?
- 爲什麼在使用
uint16_t
時字節反轉?難道不是0x6162
和0x6364
?
任何幫助或見解感激地收到。
謝謝。雖然我不會只是閱讀文本文件,那麼'fgetc'對於那些人來說也是一個不錯的選擇? – iain
fgetc可能有點低效,但基本上,是的,它實際上在每個平臺都有一個字符(8位)。不過,在某些情況下,您可能需要注意它是否返回* signed *或* unsigned * char。 – PkP
請注意,'fgetc()'典型返回257個不同值中的1個。直接保存到'char'會丟失一些信息。最好先保存一個'int'並測試'EOF'。 – chux