回覆列表
-
1 # 使用者3534897810443
-
2 # 使用者2681768447859
由於char是有符號的,因此在使用unsigned short進行轉化的時候,也會出現問題。可以改為下面的程式碼。
ifstream fin;
fin.open("data_batch_1.bin",ios::binary);
if(!fin){
cout
return -1;
}
char buffer[3073];
fin.read(buffer,3073*sizeof(char));
for(int i=0;i
unsigned char tmp=(unsigned char)buffer[i];
cout
}
sed是流編輯器,流既可以是字元流也可以是二進位制流,可以針對文字字元或二進位制字元進行修改替換,可以直接修改二進位制檔案。感謝multiple1902提醒。
我一般用sed以“迂迴”方式修改二進位制檔案,直觀些,不容易出錯:舉一個非常典型實用的sed修改二進位制檔案的應用場景:Oracle 10g的表匯出dmp檔案是一種二進位制檔案,經常需要在字符集“US7ASCII”和“ZHS16GBK”轉換,需要將US7ASCII字符集dmp檔案的“0001”字符集特徵碼改為ZHS16GBK字符集dmp檔案的“0354”字符集特徵碼,以下命令就可以用sed修改轉換:hexdump命令的作用是:將二進位制檔案轉換為文字dump檔案sed命令的作用是:將特徵碼修改替換xxd命令的作用是:將文字dump檔案轉換為二進位制檔案透過hexdump、sed、xxd命令管道組合,可以修改任何二進位制檔案,你想怎麼改就怎麼改,怎麼樣,威力大嗎?尤其是多個的二進位制檔案大批次修改,效率極高,不需要另編處理程式,也不需要使用低效的二進位制檔案編輯器。sed乍一看好像除了能替換字元其它啥也幹不了,其實威力大著呢。大批次轉換情況下,為提高效能,還可以直接修改二進位制檔案: