将二进制文件读取到“unsigned char”向量时的模板参数是啥

Posted

技术标签:

【中文标题】将二进制文件读取到“unsigned char”向量时的模板参数是啥【英文标题】:What is the template argument when reading a binary file to "unsigned char" vector将二进制文件读取到“unsigned char”向量时的模板参数是什么 【发布时间】:2014-05-06 22:59:37 【问题描述】:

这段代码有什么问题?

std::vector<unsigned char> newVector;
std::ifstream inFile(fullPath.c_str(), std::ios::in|std::ios::binary);
std::istreambuf_iterator iterator(inFile);

它给了我这个:

missing template arguments before 'iterator'

如果我把它改成这样:

std::istreambuf_iterator<unsigned char> iterator(inFile);

它抱怨这个:

invalid conversion from 'void*' to 
    'std::istreambuf_iterator<unsigned char>::streambuf_type

【问题讨论】:

【参考方案1】:

ifstreambasic_ifstream&lt;char&gt;,而不是 basic_ifstream&lt;unsigned char&gt;。因此,您需要将iterator 声明为

std::istreambuf_iterator<char> iterator(inFile);

它会起作用的。

【讨论】:

我是否将二进制文件读入“unsigned char”向量并不重要? @MikaelS.:不,会好的。例如,您可以执行newVector.insert(newVector.begin(), iterator, eos),其中eos 是默认初始化(流结束)istreambuf_iterator&lt;char&gt;。重要的是向量元素类型 (unsigned char) 可以从迭代器元素类型 (char) 构造。

以上是关于将二进制文件读取到“unsigned char”向量时的模板参数是啥的主要内容,如果未能解决你的问题,请参考以下文章

在 C 中读取和写入 unsigned char 的缓冲区到文件?

将 unsigned char * 复制到 unsigned char*

从具有指定字节顺序的二进制 unsigned char* 读取 C 中的 double

将 unsigned int + 字符串转换为 unsigned char 向量

使用 fread 从 .txt 文件中读取 unsigned char 会给出不同的值

如何将 unsigned char 值表示为十六进制字符串?