I found the length using seekg and tellg, then read them into an unsigned char*. The debugger is showing incorrect text though.
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
edit:
text file is something like this:
.l F4"w2ÍögPl Ð l œ›” ÿÿÿPl (goes on)
debugger shows something like:
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««þîþîþîþ
edit: now textfile only shows . l
. l
and debugger shows .\\xl
I think you are not adding \\0
to the buffer. I did faced the same issue and solved it by adding
+1
to the length.
char *buffer = new char [length + 1];
buffer[length] = 0; // Adding terminating character in content.
iFileStream.read(buffer, length);
std::string str(buffer);
Now the str
should be correct. Hope this helps.
As your code if.read can get file binary. your program is string output except. you can print character on by on use %c from buffer
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.