我使用“writeFileBytes”下面的函数将std::vector<unsigned char>
的内容写入文件。我想使用“unsigned char”类型来保存文件(请注意,它是“char”的强制转换)。这个问题的原因是因为“unsigned char”与任何字节兼容(例如“00000000”位)。当我们使用“char”时,我们在处理某些“无效”字符时遇到了一些问题。
有关“00000000”位(1字节)问题的详细信息,请参阅此主题What is the most suitable type of vector to keep the bytes of a file?。
void writeFileBytes(const char* filename, std::vector<unsigned char>& fileBytes){
std::ofstream file(filename, std::ios::out|std::ios::binary);
file.write(fileBytes.size() ? (char*)&fileBytes[0] : 0,
std::streamsize(fileBytes.size()));
}
writeFileBytes("xz.bin", fileBytesOutput);
有没有办法在本地使用“unsigned char”类型来写入文件?
这个问题真的有意义吗?
更新I:
有没有办法在本地使用“unsigned char”类型来写入文件? - &gt; 是<!/强>
遵循krzaq的指导方针!
void writeFileBytes(const char* filename, std::vector<unsigned char>& fileBytes){
std::ofstream file(filename, std::ios::out|std::ios::binary);
std::copy(fileBytes.cbegin(), fileBytes.cend(),
std::ostream_iterator<unsigned char>(file));
}
更新II:
这个问题真的有意义吗? - &gt; 在某些方面,是的!
我在下面发表评论......
“......'unsigned char'似乎具有'更高级别的兼容性'(包括'00000000'位)。当我们尝试将这8位('00000000'位)转换为'char'时,我们没有与'unsigned char'不同。使用'unsigned char',我们有一个无效/无法识别的'char'值,但我们有......“
有关详细信息,请参阅此主题What is the most suitable type of vector to keep the bytes of a file?!
答案 0 :(得分:3)
无所谓,char*
可用于访问任何类型的数据,并且它可以正常工作。但如果您不想使用显式广告,可以使用std::copy
和std::ostreambuf_iterator
:
copy(fileBytes.cbegin(), fileBytes.cend(),
ostreambuf_iterator<char>(file));
或者,您可以致电
copy(fileBytes.cbegin(), fileBytes.cend(),
ostream_iterator<char>(file));
但它会做同样的事情,但可能会更慢。
顺便说一句:你无法将空指针传递给write
,即UB。