我在从文件中读取图像时遇到问题,但是当有原始文本时,它可以正常工作。我读过,任何文件都可以在二进制模式下读取,但我的输出就是这样:\ 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);
答案 0 :(得分:2)
sprava
是一个字符串。当您使用+
连接其组件时,它将char* obsah
作为空终止的c-string进行管理。因此,第一个null char之后的所有内容都不会被复制到sprava
中。
修改强>
您可以在字符串中包含'\0'
的二进制数据(请参阅here)。但是,在这种方法中需要非常小心,因为每当您将字符串转换为char*
指针时,处理类似于空终止的c字符串,字符串的一部分可能会被忽略。如果你在I / O中使用你的字符串,它也可能会产生奇怪的结果。
但是,如果您想继续,可以使用std::copy()
和back inserter;
sprava = prepinac+"\r\n"+file+"\r\n\r";
copy(obsah, obsah+length, back_inserter<string>(sprava));