window下文字檔案和二進位制檔案的理解

2021-06-06 07:11:07 字數 759 閱讀 4069

繼續使用之前的複製測試程式,來對乙個aaa.bmp進行複製

#include

using namespace std;

int main()

while(!in.eof());

return 0;

複製之後,看到bbb.bmp生成了。

但是兩者的大小不一樣:aaa.b***512個位元組。bbb.bmp538個位元組。

顯然複製過程中已經通過get()得到了一定的資訊,但是在中間的操作過程中因為不知名的原因,資訊沒能正常輸出。

是什麼原因呢?

將aaa.bmp與bbb.bmp分別以二進位制檔案的形式開啟。

通過對比,發現aaa和bbb前面部分都是相同的,但是到中間的某個位置,aaa中的乙個十六進製制數oa在bbb中被解析成了0d 0a,到bbb末尾的位置從1a開始之後就沒有成功輸出。

原因:在輸入輸出形式檢測中,若有iso::binary,則以二進位制檔案形式輸入輸出,若預設則預設為文字檔案。

從我的程式來看,顯然是以文字檔案輸入輸出了。

那麼問題就來了。若用文字檔案開啟之後,程式自動會將一些串轉換為符合文字檔案形式的串。

如之前討論過的,window自動將\n轉換為\r\n,即此處的0a自動轉換為0d 0a。

將**改為:

#include

using namespace std;

int main()

while(!in.eof());

return 0;

}呵呵,果斷複製成功!

文字檔案與二進位制檔案

從本質上說所有檔案都是二進位制檔案,文字i o是在二進位制i o基礎上提供的一層抽象,它封裝了字元的編碼和解碼過程。在文字i o中自動進行編碼與解碼。在windows和dos系統中,狹義的文字檔案是指擴充套件名為txt的檔案。實際上,那些沒有規定格式的,由可理解的的ascii以及其它編碼文字組成的檔...

文字檔案與二進位制檔案

維基百科 二進位制檔案一般指包含ascii及擴充套件ascii字元中編寫的資料或程式指令的檔案。廣義的二進位制檔案即為檔案,由檔案在外部儲存裝置的存放方式為二進位制而得名。狹義的二進位制檔案即指除文字檔案以外的檔案。簡單來說,文字檔案是基於字元編碼的檔案,常見的編碼有ascii編碼,unicode編...

文字檔案與二進位制檔案

什麼是文字檔案,什麼是二進位制檔案?在windows和dos系統中,狹義的文字檔案是指擴充套件名為txt的檔案。實際上,那些沒有格式的,由可理解的ascii以及其他編碼文字組成的檔案都是文字檔案,如c原始檔,html超文字檔案,xml。除此之外的其他檔案都是二進位制檔案,如word檔案doc,影象格...