簡體   English   中英

逐字節讀取任何文件(不是.bin文件)

[英]Reading any file (not .bin file) byte by byte

我想按字節(或一點一點)讀取任何文件(.bin,.txt,.jpg,.zip,.mp3等)並將其顯示在控制台上(格式如00100011)。 該網站上回答了一些問題,但主要是有關.bin文件的問題。 我使用哪種文件格式都沒有關系。 例如,當您在文本編輯器中打開.png文件時,您會在屏幕上看到“ ∑P®pT™5à*”之類的怪異字符,我想這些是文件的每8位變成ASCII字母並顯示在編輯(如果我寫錯了,請糾正我)。

我正在用C ++編寫此程序,到目前為止我嘗試了

fstream file("foo.txt", ios_base::binary);

以二進制模式讀取文件並獲取8位塊,但這僅適用於.txt文件,並且僅像通常那樣在文本文件中顯示字符。 但是, 甚至無法正常工作或打開.png等其他文件格式

我可以得到一些有關如何實現此目標的提示,如果我提供了任何錯誤的信息,請糾正我。

問題在於字節中只有一部分值是可打印的。 例如,值0x03是不可打印的,但0x42是可打印的。

我建議您在打印之前將變量從uint8_tunsigned int cout << hex << (unsigned int)(value) << endl;

另外,在讀取二進制文件時,請勿使用charsigned charunsigned char 使用uint8_tuint16_tuint32_t

您可能正在將值分配給“ char”數據類型。 您應該始終使用無符號類型(“ unsigned char”足以滿足您的情況),因為二進制文件沒有負值,並且您將能夠讀取0-255而不是0-127(文本字符)。 然后,如果要以二進制形式顯示它,則可以使用以下命令:

unsigned char c = 251;
char binary[8];
itoa(c, binary, 2);
cout << binary << endl;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM