[英]Why is fread() stopping at a string of 0s?
我正在嘗試使用以下二進制配置讀取二進制文件
00 00 00 1A 79 20 83 DB 44 ...
使用以下功能
static BitArray getBitArray(string filename)
{
FILE *fs = fopen(filename.data(),"r");
fseek (fs , 0 , SEEK_END);
unsigned long s = ftell (fs);
rewind (fs);
unsigned char *buffer = new unsigned char[s+1];
fread(buffer,1,s,fs);
BitArray bArray;
for(int i=0; i<s; i++)
bArray.add(buffer[i]);
delete[] buffer;
fclose(fs);
return bArray;
}
其中BitArray
只是我自己的操作類。 問題是,對於我上面提到的bin文件,它只讀取前三個0,就像這樣
00 00 00
即使fseek
找到了正確的文件大小。
至於為什么我需要字符串0s,是因為00 00 00 1A
形成一個32位整數,它恰好小到足以留下三個0x00
秒。
我懷疑在文件開頭的一串0x00
被識別為EOF
,所以我嘗試在文件前填充一個字符,但它沒有完全解決。
可能是什么導致了這個?
在Windows中,0x1A又名^Z
是文件結束符。 您已在文本模式而不是二進制模式下打開文件。 當您在Windows中以文本模式打開文件時,它將一直讀到文件結尾或第一個^Z
字符。
將"rb"
傳遞給fopen
而不是"r"
以二進制模式打開文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.