gpt4 book ai didi

c++ - 如何将 basic_filebuf 与 char 以外的元素类型一起使用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:28 24 4
gpt4 key购买 nike

假设我想使用 basic_filebuf 读取文件的内容。我有一个名为 boost::uintmax_t 的类型,它的大小为 8 字节。我正在尝试编写以下内容:

typedef basic_filebuf<uintmax_t> file;
typedef istreambuf_iterator<uintmax_t> ifile;

file f;
vector<uintmax_t> data, buf(2);

f.open("test.txt", std::ios::in | std::ios::binary);
f.pubsetbuf(&buf[0], 1024);

ifile start(&f), end;
while(start != end)
{
data.push_back(*start);
start++;
}

问题是一些 bytes 被读取了,其他的则没有。例如,假设编号为 1-9 的文件中有 9 个字节:

|1|2|3|4|5|6|7|8|9|

当我运行上面的代码时,只有一个元素被推回data,它只包含来自f中原始数据的4字节 >:

[0|0|0|0|4|3|2|1] --> only element in [data]

我做错了什么?这是我第一次直接使用basic_filebuf,虽然我知道如何使用filebuf

最佳答案

basic_filebuf 处理“内部”字符类型和“外部”字符类型。 “外部”是文件的内容,总是字节。 “内部”参数是模板参数,是在其与程序的接口(interface)中使用的参数。为了在两者之间进行转换,basic_filebuf 使用其语言环境的 codecvt facet。

所以如果你想让它直接写入你给它的字节,你有两个选择:

  • 使用仅在“内部”和“外部”编码之间进行转换的“退化”codecvt,而不是尝试执行转换。
  • 使用 basic_filebuf,确保使用“经典”语言环境,并进行强制转换以烧毁自己

关于c++ - 如何将 basic_filebuf 与 char 以外的元素类型一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1423560/

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