繁体   English   中英

c ++-保存“ 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::copystd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM