0
我使用seekg和tellg找到了長度,然後將它們讀取爲無符號字符*。調試器顯示不正確的文本。如何從文本文件中讀取非ASCII字符
ifstream is (infile, ifstream::binary);
//find length
is.seekg (0, is.end);
int length = is.tellg();
is.seekg (0, is.beg);
char * buffer = new char [length];
is.read (buffer,length);
//delete[] buffer; removed
//size_t cipherTextLength = length; removed
//unsigned char* cipherText = new unsigned char[cipherTextLength]; removed
//is.read (reinterpret_cast<char*>(cipherText),length); removed
編輯:
文本文件是這樣的:
.l F4"w2ÍögPl Ð l œ›」 ÿÿÿPl (goes on)
調試器顯示是這樣的:
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««þîþîþîþ
編輯:現在文本文件只顯示. l
和調試器顯示.\xl
你打電話給'is.read()'來獲取整個文件,把它扔掉,然後想知道爲什麼下一次讀取嘗試什麼都不做。 ..?它已經在文件的末尾,並且'.eof()'爲true。無論如何,這可能是一個更好的主意[將整個文件內容讀入std :: string](http://stackoverflow.com/questions/2602013/read-whole-ascii-file-into-c-stdstring?rq= 1) - 它們在析構函數中釋放內存,處理二進制內容就好了,並且有許多有用的函數來幫助您查詢和操作它們。 –
@TonyD泰勒麥克亨利的解決方案都只讀取文件,直到無。 –
@ atsay714你可以修正你的例子,所以你不是從'ifstream'兩次閱讀嗎?這應該工作。話雖如此,你應該使用TonyD鏈接的解決方案之一,所以你不需要手動管理內存。 'istreambuf_iterator'應該讀取直到到達EOF,直到第一個NUL字符。你是否以二進制模式打開文件? – Praetorian