我有一個二進制文件,我需要從中讀取32位模式 - 如果EOF已達到使其小於32位的事件 - 我需要錯誤地說出乎意料的其他只是打破。我嘗試了很多,但我無法獲取不完整的字節檢測部分的工作。有人可以提供一些指針如何實現它?我曾經想過一次只能探測一個字節byte [0],然後評估它的EOF但是沒有工作。檢測不完整的32位二進制數據
for (;;)
{
bytes_read = fread(buffer, 4, 1, inFile);
if (bytes_read == 1)
{
// perform the task
}
else
{
// detect if its incomplete sequence or EOF and output appropriately
}
}
P.S:編輯FREAD按照評論 -
爲什麼你使用'sizeof(char)'作爲要讀取的項目數? – Barmar
'sizeof(char)'總是1. EOF標記不適合'char'。你正在嘗試閱讀多個字符,並仍然比較你是否只閱讀一個字符? –
文件中沒有「十六進制」;你有**二進制**。十六進制由**文本**組成,如'3D0F',它是**四個**字符,表示16位或兩個字節。還要注意'sizeof(char)'的定義是'1',並且由於其他原因使用它是不恰當的:'fread'的第三個參數表示要讀取的元素的數量,第二個參數給出的大小。 'sizeof(char)'不是表達「給我一個元素」概念的好方法。 – Kaz