c++ - 从文件中读取图像 - C++

标签 c++ image file

我在从文件中读取图像时遇到问题,但是当存在原始文本时它可以正常工作。我读到,任何文件都可以以二进制模式读取,但我的输出只是这样:\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/

相关文章:

c++ - Qt构建为没有dll的单个exe文件

image - 使用基于图像的网站关键字的 SEO?

c++ - mprotect 和文件句柄

c++ - 指针总是会导致内存泄漏还是在超出范围时被删除?

c++ - 使用 C++ 中的 try 和 catch 方法创建一个函数以获取用户名

c++ - 使用std::source_location报告错误的最佳实践

ios - 图像选择器显示多个图像,如拼贴画,没有内存问题

css - 如何将文本放在 CSS 图像轮播上?

c++ - 如何仅删除/删除可执行文件(又名没有扩展名的文件)

python - 处理大文件的最快方法?