[英]Initializing a struct with the contents of a std::vector<unsigned char>
[英]c++ - Save the contents of a “std::vector<unsigned char>” to a file
我使用“ writeFileBytes”下面的函数将std::vector<unsigned char>
的内容写入文件。 我想使用“ unsigned char”类型保存文件(请注意,这是对“ char”的强制转换)。 该问题的原因是因为“无符号字符”与任何字节(例如“ 00000000”位)都具有兼容性。 当我们使用“字符”时,某些“无效”字符的操作存在一些问题。
请参阅本主题, 什么是最合适的向量类型来保留文件的字节? 有关“ 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”类型写入文件? -> 是的!
遵循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'值,但是我们有...”
请参阅本主题, 什么是最合适的向量类型来保留文件的字节? 欲获得更多信息!
没关系, char*
可用于访问任何类型的数据,并且可以正常工作。 但是,如果您不想使用显式std::ostreambuf_iterator
,则可以使用std::copy
和std::ostreambuf_iterator
:
copy(fileBytes.cbegin(), fileBytes.cend(),
ostreambuf_iterator<char>(file));
或者,您可以致电
copy(fileBytes.cbegin(), fileBytes.cend(),
ostream_iterator<char>(file));
但是它会做同样的事情,只是速度可能会更慢。
顺便说一句:您不能将null指针传递给write
,即UB。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.