2013-09-26 156 views
-5

我想製作一個c/C++程序來讀取文件並將其打印爲二進制形式作爲輸出。 我能夠以正常文本格式打印它。以二進制形式打印文件

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
FILE *fp; 
char ch; 

if((fp=fopen("C:\\Users\\!diot\\Desktop\\21.txt","rb"))==NULL) 
{ 
    printf("\nCannot open file\n"); 
} 

fseek(fp,0,SEEK_SET); 

ch=getc(fp); 

while(!feof(fp)) 
{ 
    putchar(ch); 
    ch=getc(fp); 
} 


fclose(fp); 

return(0); 
} 

但我想打印它的二進制形式。 所以,請幫忙。

+0

爲什麼你需要「二元」形式? – lpapp

+0

其實我想在壓縮項目上工作。 –

+0

您能否澄清一下您的需求?那麼爲什麼不使用用C++編寫的現有歸檔框架呢?你需要一些特殊的算法? – lpapp

回答

0

在C++中,簡單地以二進制方式打開文件:

fstream fs; 
fs.open("filename.txt",ios::binary); 
+0

-1,因爲讀取文件的方法是完全可以接受的,並且也可以在C++中使用。作者正在以二進制模式打開文件(請參閱「rb」選項到「打開」) –

+0

@MarkLakata謝謝!我不知道 – Saksham

0

裏面你while循環,你在哪裏一次讀取每個字符(即字節),你可以做字符的取與操作ch,所有字符從00000001到10000000.每次操作的輸出都會讓您知道是否設置了該特定位。你可以用它來進一步處理。

1

我假設你的意思是「二進制」,你想看到的內容爲數值數據,而不是ASCII文本。更改

putchar(ch); 

printf("0x%02X ",ch); 
    { 
    static int counter=0; 
    if ((++counter) % 16 == 0) printf("\n"); 
    } 

這將顯示該文件爲十六進制數據。

當然,還有其他方法可以做到這一點。如果您使用Visual Studio,只需使用.bin擴展名重命名文件,然後直接用Visual Studio打開它以直接查看十六進制數據。還有很多免費的hex編輯器。

+0

+1回答這個問題,並試圖直觀的OP需要不清楚,雖然他們是 – john

+0

我想打印它的二進制形式,即,只有0和1(機器語言)。有沒有辦法做到這一點,否則我必須自己做? –

+0

某些c庫支持printf的%b格式,但這不是標準格式。您可以遍歷每個字節的8位,並且printf「0」或「1」 –

相關問題