我試圖一次訪問二進制數據10位。我認爲最好的方法是在unsigned long long中讀入40位,然後使用位掩碼來訪問所需的數據。我的努力似乎讀了64位,我想知道是否有人能指出我要出錯的地方。謝謝。一次讀取二進制數據40位
FILE * pFile;
long lSize;
unsigned long long * buffer;
size_t result;
pFile = fopen ("test.bin" , "rb");
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}
fseek (pFile , 0 , SEEK_END);
lSize = (ftell (pFile))/5;
rewind (pFile);
buffer = (unsigned long long*) malloc (sizeof(unsigned long long)*lSize);
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
result = fread (buffer,5,lSize,pFile);
if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
當我輸出緩衝區[0]我越來越:
0100110111001110101110001110000111011111110001100011100110111011
但我想我會得到這樣的:
0000000000000000000000001110000111011111110001100011100110111011
什麼是文件的TEST.bin,燒寫的實際內容是什麼?在一些十六進制編輯器中打開它,如HxD(假設你在Windows中工作)。 – Dialecticus
用零初始化緩衝區 - 例如使用'calloc'。 – pSoLT
@Dialecticus我剛剛下載了一個十六進制編輯器,並檢查了內容不匹配。有1011101100111001110001101101111100111001110001101101111111100001 – Kahless