【问题标题】:Read binary file into unsigned char vector buffer将二进制文件读入无符号字符向量缓冲区
【发布时间】:2019-12-18 15:42:45
【问题描述】:

我正在尝试将二进制文件流读入std::vector 缓冲区。

std::ifstream file(srcPath, std::ifstream::binary);
file.unsetf(std::ios::skipws);
const std::vector<unsigned char> buffer(bufferSize);
file.read(buffer.data(), bufferSize);

但我收到以下错误

无法使用 'const std::__1::vector >::value_type *' 类型的右值初始化 'std::__1::basic_istream >::char_type *' 类型的参数(又名 'char *') (又名'const unsigned char *')

我在致电read 时无法解释此错误并弄清楚我做错了什么。

【问题讨论】:

    标签: c++


    【解决方案1】:

    你制作了你的矢量const

    因此,您无法更改其内容。

    你想改变它的内容(这是它的目的)。

    所以,不要让它const

    【讨论】:

      【解决方案2】:
      const std::vector<unsigned char> buffer(bufferSize);
      

      您在这里声明了一个const 对象。根据定义,const 对象不能被修改。你通过读入一些东西来修改这个对象的计划,在这一点上已经注定要失败。但还有第二个问题。

      file.read(buffer.data(), bufferSize);
      

      如果您真的仔细阅读编译器的错误消息,它会告诉您确切的问题所在。

      首先read()的第一个参数是char *,一个指向字符的指针。

      但是您传递的是const unsigned char *。那是因为data(),鉴于bufferconst,显然返回一个const unsigned char *

      这就是你得到编译错误的原因。如果您现在重新阅读编译错误,跳过大约一半的单词,现在就很有意义了:

      无法用右值初始化 ... 'char *' 类型的参数 类型...'const unsigned char *'

      要修复它,您的 buffer 应该const 对象。最好是std::vector&lt;char&gt;,所以你最终会真正将char * 传递给read()

      但是,如果您坚持,您可以将其保留为unsigned chars 的向量,并使用reinterpret_castdata() 的结果从unsigned char * 转换为char *

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-16
        • 1970-01-01
        • 2014-11-21
        • 2014-01-06
        • 2010-10-13
        • 2012-10-03
        • 2013-05-20
        • 2016-03-09
        相关资源
        最近更新 更多