我在从文件中读取图像时遇到问题,但是当存在原始文本时它可以正常工作。我读到,任何文件都可以以二进制模式读取,但我的输出只是这样:\FF\D8\FF\E0 然后它就停止了。它停在这个字符处,所以我不确定它是否无法解析该字符或什么。有谁知道出了什么问题吗?提前致谢。
这是我的代码
char* obsah;
std::string sprava;
std::ifstream is (file.c_str(), std::ifstream::binary);
if(is){
is.seekg (0, is.end);
int length = is.tellg();
is.seekg (0, is.beg);
obsah = new char [length];
is.read(obsah,length);
sprava = prepinac+"\r\n"+file+"\r\n\r"+obsah;
}
else exit(EXIT_FAILURE);
最佳答案
sprava
是一个字符串。当您使用 +
连接其组件时,它会将 char* obsah
作为空终止的 C 字符串进行管理。因此第一个空字符之后的所有内容都不会被复制到 sprava
中。
编辑:
您可以在字符串中包含包含 '\0'
的二进制数据(请参阅 here )。但是,在这种方法中您需要非常小心,因为每当您将字符串转换为像以 null 结尾的 c 字符串一样处理的 char* 指针时,字符串的一部分可能会被忽略。如果你在 I/O 中使用你的字符串,它也可能会产生奇怪的结果。
如果您想继续,您可以使用 std::copy()
和一个back inserter ;
sprava = prepinac+"\r\n"+file+"\r\n\r";
copy(obsah, obsah+length, back_inserter<string>(sprava));
这里有一个online demo
关于c++ - 从文件中读取图像 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36663360/