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