gpt4 book ai didi

c++ - 将二进制文件读入 unsigned char vector 缓冲区

转载 作者:太空宇宙 更新时间:2023-11-04 15:29:49 25 4
gpt4 key购买 nike

我正在尝试将二进制文件流读入 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);

但是我得到以下错误

Cannot initialize a parameter of type 'std::__1::basic_istream >::char_type *' (aka 'char *') with an rvalue of type 'const std::__1::vector >::value_type *' (aka 'const unsigned char *')

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

最佳答案

const std::vector<unsigned char> buffer(bufferSize);

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

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

如果您真的阅读了编译器的错误消息,它会慢慢地告诉您问题所在。

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

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

这就是为什么会出现编译错误。如果您现在重新阅读编译错误,跳过大约一半的单词,现在就完全明白了:

Cannot initialize a parameter of type ... 'char *' with an rvalue of type ... 'const unsigned char *'

要修复它,您的 buffer应该const目的。最好是 std::vector<char> ,所以你最终真的通过了一个 char *read() .

但是,如果您坚持,您可以将其保留为 unsigned char 的 vector s 并使用 reinterpret_cast转换 data() 的结果来自 unsigned char *char * .

关于c++ - 将二进制文件读入 unsigned char vector 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57454776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com