"的内容保存到文件中-6ren"> "的内容保存到文件中-我使用“writeFileBytes”下面的函数写入 std::vector 的内容到一个文件。我想使用“unsigned char”类型来保存文件(请注意,它是对“char”的强制转换)。这个问题的-6ren">
gpt4 book ai didi

c++ - 将 "std::vector"的内容保存到文件中

转载 作者:搜寻专家 更新时间:2023-10-31 01:34:11 24 4
gpt4 key购买 nike

我使用“writeFileBytes”下面的函数写入 std::vector<unsigned char> 的内容到一个文件。我想使用“unsigned char”类型来保存文件(请注意,它是对“char”的强制转换)。这个问题的原因是因为“unsigned char”与任何字节(例如“00000000”位)兼容。当我们使用“char”时,我们在处理某些“无效”字符时会遇到一些问题。

查看本主题What is the most suitable type of vector to keep the bytes of a file?有关“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' 值,但我们有......“

查看本主题What is the most suitable type of vector to keep the bytes of a file?获取更多信息!

最佳答案

没关系,char* 可用于访问任何类型的数据,它会正常工作。但是如果你不想使用显式转换,可以使用 std::copystd::ostreambuf_iterator :

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

或者,你可以调用

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

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

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

关于c++ - 将 "std::vector<unsigned char>"的内容保存到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40052857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com