c++ - 将“std::vector”的内容保存到文件

2024-05-06

我使用“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了解更多信息!


没关系,char*可用于访问任何类型的数据并且它会正常工作。但如果你不想使用显式强制转换,也许可以使用std::copy http://en.cppreference.com/w/cpp/algorithm/copy and std::ostreambuf_iterator http://en.cppreference.com/w/cpp/iterator/ostreambuf_iterator:

copy(fileBytes.cbegin(), fileBytes.cend(),
     ostreambuf_iterator<char>(file));

或者,您可以致电

copy(fileBytes.cbegin(), fileBytes.cend(),
     ostream_iterator<char>(file));

但它会做同样的事情,只是可能更慢。

顺便说一句:你不能将空指针传递给write,那是UB。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ - 将“std::vector”的内容保存到文件 的相关文章

随机推荐