读取二进制文件时输出不一致
Inconsistent output when reading binary file
改编我在SO中看到的一些代码,我得出了以下解决方案:
fstream file("sample.bin", ios::binary | ios::in | ios::ate);
unsigned char charsRead[(int)file.tellg()];
file.read((char *) &charsRead, sizeof(char*));
for(int i=0; i<sizeof(charsRead); i++)
cout << (int) charsRead[i] << endl;
file.close();
它确实可以编译,但每次执行时,它returns 都会有不同的输出。有谁知道为什么会这样?
我假设前 4 个(或 8 个)字节永远相等,并且不同的输出从第 5 个或第 9 个字节开始。
正如 πìντα ῥεῖ 所指出的,您读取 sizeof(char*)
个字节(通常为 4 或 8 个字节)并打印 sizeof(charsRead)
个字节。
如果sizeof(char*) < sizeof(charsRead)
(即:如果文件的dim大于4或8),你写
sizeof(char*)
初始化字符
sizeof(charsRead) - sizeof(char*)
未初始化的字符(因此,随意值)。
我仍然不明白输出,但我找到了一个使用缓冲区读取二进制文件的非常一致的解决方案。
http://www.cplusplus.com/doc/tutorial/files/
改编我在SO中看到的一些代码,我得出了以下解决方案:
fstream file("sample.bin", ios::binary | ios::in | ios::ate);
unsigned char charsRead[(int)file.tellg()];
file.read((char *) &charsRead, sizeof(char*));
for(int i=0; i<sizeof(charsRead); i++)
cout << (int) charsRead[i] << endl;
file.close();
它确实可以编译,但每次执行时,它returns 都会有不同的输出。有谁知道为什么会这样?
我假设前 4 个(或 8 个)字节永远相等,并且不同的输出从第 5 个或第 9 个字节开始。
正如 πìντα ῥεῖ 所指出的,您读取 sizeof(char*)
个字节(通常为 4 或 8 个字节)并打印 sizeof(charsRead)
个字节。
如果sizeof(char*) < sizeof(charsRead)
(即:如果文件的dim大于4或8),你写
sizeof(char*)
初始化字符sizeof(charsRead) - sizeof(char*)
未初始化的字符(因此,随意值)。
我仍然不明白输出,但我找到了一个使用缓冲区读取二进制文件的非常一致的解决方案。 http://www.cplusplus.com/doc/tutorial/files/