将二进制文件读取到“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】:ifstream
是 basic_ifstream<char>
,而不是 basic_ifstream<unsigned char>
。因此,您需要将iterator
声明为
std::istreambuf_iterator<char> iterator(inFile);
它会起作用的。
【讨论】:
我是否将二进制文件读入“unsigned char”向量并不重要? @MikaelS.:不,会好的。例如,您可以执行newVector.insert(newVector.begin(), iterator, eos)
,其中eos
是默认初始化(流结束)istreambuf_iterator<char>
。重要的是向量元素类型 (unsigned char
) 可以从迭代器元素类型 (char
) 构造。以上是关于将二进制文件读取到“unsigned char”向量时的模板参数是啥的主要内容,如果未能解决你的问题,请参考以下文章
在 C 中读取和写入 unsigned char 的缓冲区到文件?
将 unsigned char * 复制到 unsigned char*
从具有指定字节顺序的二进制 unsigned char* 读取 C 中的 double
将 unsigned int + 字符串转换为 unsigned char 向量