使用 basic_ofstream 写入字节数据序列
Write a sequence of byte data using basic_ofstream
我有一个 info_list
类型的 std::list<std::pair<std::size_t, std::byte*>>
变量,我想迭代它并将数据以二进制格式顺序保存到一个文件中。这是我尝试过的:
void write_data() {
std::basic_ofstream<std::byte> file("data.bin", std::ios::binary);
for (decltype(auto) info : info_list) {
file.write(info.second, info.first);
}
}
std::pair
的first
就是second
指针指向的数据大小
我不擅长这些 C++ 流。该文件被保存为空。我做错了什么?
我想避免使用 C 功能来实现此目的。
编辑:
我尝试使用 std::ofstream
而不是 std::basic_ofstream<std::byte>
并且有效...为什么 std::basic_ofstream<std::byte>
在这里不起作用?我错过了什么吗?
这就是您所缺少的:使用 std::basic_ofstream<std::byte>
时,您实际上是在实例化 std::basic_ofstream<std::byte, std::char_traits<std::byte>>
。
问题在于 std::char_traits
,因为标准特化(行为明确定义的类型)是:
std::char_traits<char>
std::char_traits<wchar_t>
std::char_traits<char16_t>
std::char_traits<char32_t>
std::char_traits<char8_t>
与使用标准库中定义的特化(即 std::char_traits<char>
)的 std::ofstream
不同,您的代码使用 std::char_traits<std::byte>
。要继续这样的实施,您必须 provide the missing specialization.
我有一个 info_list
类型的 std::list<std::pair<std::size_t, std::byte*>>
变量,我想迭代它并将数据以二进制格式顺序保存到一个文件中。这是我尝试过的:
void write_data() {
std::basic_ofstream<std::byte> file("data.bin", std::ios::binary);
for (decltype(auto) info : info_list) {
file.write(info.second, info.first);
}
}
std::pair
的first
就是second
指针指向的数据大小
我不擅长这些 C++ 流。该文件被保存为空。我做错了什么?
我想避免使用 C 功能来实现此目的。
编辑:
我尝试使用 std::ofstream
而不是 std::basic_ofstream<std::byte>
并且有效...为什么 std::basic_ofstream<std::byte>
在这里不起作用?我错过了什么吗?
这就是您所缺少的:使用 std::basic_ofstream<std::byte>
时,您实际上是在实例化 std::basic_ofstream<std::byte, std::char_traits<std::byte>>
。
问题在于 std::char_traits
,因为标准特化(行为明确定义的类型)是:
std::char_traits<char>
std::char_traits<wchar_t>
std::char_traits<char16_t>
std::char_traits<char32_t>
std::char_traits<char8_t>
与使用标准库中定义的特化(即 std::char_traits<char>
)的 std::ofstream
不同,您的代码使用 std::char_traits<std::byte>
。要继续这样的实施,您必须 provide the missing specialization.