檔案讀寫關於字元的錯誤 解決方案

2022-05-10 22:45:06 字數 794 閱讀 7749

最近打哈夫曼編碼,壓位以後需要支援任意資料的位元組流檔案讀寫,然後一堆玄學bug調了我一天。。

好在終於可以把bug彙總了:

1.0x1a問題:用字元檔案讀入時,讀到0x1a會提前中斷,返回-1(unsigned char為255)。實際上這是windows系統乙個遠古bug,因為曾經0x1a就是eof,然而現在eof已經變為-1了。

解決方案:使用rb二進位制檔案讀入,可以防止讀入函式進行加工轉義。

2.判斷檔案結束問題:eof為255,然而對於字元0xff(255),eof將會和0xff重複。然而實際上eof返回的是乙個int型別整數-1,即0xffffffff,而被unsigned char截斷以後,就只剩下了0xff,無法和字元0xff區分。

解決方案:使用unsigned short型別讀入。

3./r字元自動補全:windows系統下會自動將/n字元補全為/r/n,所以要判斷當前讀到的這個/r究竟是自動補全的還是本來就是資料裡面的。

解決方案:對於本來就是/n轉換成/r/n的,直接跳過/r

對於本來就是/r後面接了乙個/n的,將會變成/r/r/n,要去掉其中的乙個/r

對於本來就是/r的,讀入判斷確實只有/r以後,復位按照這一次就是/r的情況進行操作(fseek把檔案位置指標轉移回來乙個)

最終實現的win下fgetc二進位制檔案的函式:

bool fgetc_windows(file *in, unsigned char &ret) 

ret = (unsigned char) ch_buf;

return true;

}

Error running 錯誤解決方案

在pycharm等ide整合開發環境中出現以下錯誤時,即 error running cannot run program c users administrator pycharmprojects venv scripts python.exe in directory c users admin...

CUDA PCL boost錯誤解決方案

如果包含標頭檔案 include則報錯的大致內容包括 pcl io file io.h 346 error namespace boost has no member iequals pcl io pcd io.h 485 error name followed by must be a class...

python出現關於編碼的錯誤 解決方案

報錯 unicodedecodeerror gbk codec can t decode byte 0x9d in position 1270 illegal multibyte sequence使用python的時候經常會遇到文字的編碼與解碼問題,其中很常見的一種解碼錯誤如題目所示,下面介紹該錯誤...