2015-05-08 119 views
0

我試圖打開一個二進制文件並讀取一個類的任務內容。即使在進行研究之後,我在嘗試打開並打印二進制文件的內容時遇到了任何問題。我甚至不知道我應該得到什麼,如何檢查它是正確的,但我知道沒有任何東西(這是我目前得到的)是不好的。下面是我從這個網站在C中打開二進制文件

#include<stdio.h> 

int main() 
{ 
    FILE *ptr_myfile; 
    char buf[8]; 

    ptr_myfile = fopen("packets.1","rb"); 
    if (!ptr_myfile) 
    { 
     printf("Unable to open file!"); 
     return 1; 
    } 

    fread(buf, 1, 8, ptr_myfile); 

    printf("First Character: %c", buf[0]); 

    fclose(ptr_myfile); 
    return 0; 
} 

當此打印,我得到了搜索代碼「第一個字符:」沒有別的印刷。也許它不能在終端中正常打印?我不知道,任何幫助將不勝感激,謝謝

+0

看來你正確地調用它。用文本文件嘗試一下。 –

+1

如果您使用十六進制編輯器查看您想要讀取的文件,它會顯示第一個字符。或者你可以打印字符的值,而不是試圖將其轉換爲字符,只是爲了檢查它 - 它可能是一個空白字符。請注意,如果您使用以Unicode編碼的文本文件,則文件的開頭可能會有一個字節順序標記。 –

回答

2

如果它是一個二進制文件,它很可能是它的內容不打印特別好文本(這是什麼使得一個二進制的二進制文件)。除了打印爲字符嘗試打印爲十六進制數字:

#include <stdio.h> 
#include <stddef.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE *ptr_myfile; 
    char buf[8]; 

    ptr_myfile = fopen("packets.1","rb"); 
    if (!ptr_myfile) 
    { 
     printf("Unable to open file!"); 
     return 1; 
    } 

    size_t rb; 
    do { 
     rb = fread(buf, 1, 8, ptr_myfile); 
     if(rb) { 
      size_t i; 
      for(i = 0; i < rb; ++i) { 
        printf("%02x", (unsigned int)buf[i]); 
      } 
      printf("\n"); 
     } 
    } while(rb); 

    fclose(ptr_myfile); 
    return 0; 
} 
2

首先,你需要檢查你有多少數據在緩衝區中。 fread返回長度;如果它爲零,則訪問buf[0]是不合法的。

並非所有的字符是可以打印你可以看到你做了什麼數據,如果你打印的字符代碼c,而不是c本身。爲此,請使用%d

size_t len = fread(buf, 1, 8, ptr_myfile); 
if (len != 0) { 
    printf("First Character: '%c', code %d", buf[0], buf[0]); 
} else { 
    printf("The file has no data\n"); 
}