我使用“writeFileBytes”下面的函数来写入a的内容std::vector<unsigned char>
到一个文件。我想使用“unsigned char”类型来保存文件(请注意,这是对“char”进行了强制转换)。这个问题的原因是因为“unsigned char”与任何字节(例如“00000000”位)兼容。当我们使用“char”时,我们在操作某些“无效”字符时遇到一些问题。
看这个主题保存文件字节的最合适的向量类型是什么? https://stackoverflow.com/questions/40050243/what-is-the-most-suitable-type-of-vector-to-keep-the-bytes-of-a-file?noredirect=1#comment67378908_40050243有关“00000000”位(1 字节)问题的更多信息。
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”类型写入文件?
这种担忧真的有道理吗?
更新一:
有没有办法本地使用“unsigned char”类型写入文件? -> YES!
遵循 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));
}
更新二:
这种担忧真的有道理吗? -> 在某些方面,是的!
正如我在下面评论的那样...
“...'unsigned char'似乎具有'更高级别的兼容性'(包括'00000000'位)。当我们尝试将这8位('00000000'位)转换为'char'时,我们没有像'那样的值unsigned char'。对于'unsigned char',我们有一个无效/无法识别的'char'值,但我们有......”
看这个主题保存文件字节的最合适的向量类型是什么? https://stackoverflow.com/questions/40050243/what-is-the-most-suitable-type-of-vector-to-keep-the-bytes-of-a-file?noredirect=1#comment67378908_40050243了解更多信息!