C++ 将二进制文件读入无符号字符向量缓冲区

C++ 将二进制文件读入无符号字符向量缓冲区,c++,C++,我正在尝试将二进制文件流读入std::vector缓冲区 但是我得到了以下错误 无法使用类型为“const std::\uu 1::vector>::value\u type*”aka“const unsigned char*”的右值初始化类型为“std::\uu 1::basic\u istream>::char\u type*”aka“const unsigned char*”的参数 我很难解释这个错误,也很难弄清楚我在阅读过程中做错了什么 如果您确实阅读了编译器的错误消息,那么慢慢地,它会

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

但是我得到了以下错误

无法使用类型为“const std::\uu 1::vector>::value\u type*”aka“const unsigned char*”的右值初始化类型为“std::\uu 1::basic\u istream>::char\u type*”aka“const unsigned char*”的参数

我很难解释这个错误,也很难弄清楚我在阅读过程中做错了什么

如果您确实阅读了编译器的错误消息,那么慢慢地,它会准确地告诉您问题所在

首先,读取的第一个参数是char*,一个指向字符的指针

但您正在传递一个常量unsigned char*。这是因为数据,假设缓冲区是常量,显然返回一个常量无符号字符*

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

无法初始化类型为“”的参数右值为的char*' 键入…'常量无符号字符*'

要修复它,缓冲区不应该是常量对象。更可取的是,它应该是一个std::vector,因此您最终实际上传递了一个char*来读取

但是,如果您坚持,您可以将其保留为无符号字符的向量,并使用reinterpret_cast将数据结果从无符号字符*转换为字符*

您使向量常量为

因此,您不能更改其内容

你想改变它的内容,这就是它的目的

所以,不要让它成为常数

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::vector<unsigned char> buffer(bufferSize);
file.read(buffer.data(), bufferSize);