【发布时间】:2018-11-21 13:55:52
【问题描述】:
我想知道为什么,使用字符串流时,距离符合预期。迭代器一次迭代 32 位,我得到 6 个。
但是使用 char32_t 上的 ifstream 模板,我希望它一次读取 4 个字节,但似乎在 streambuf 内部它会读取一个字符,然后将其转换为 char32_t。所以距离是 24。
文件 test.txt 包含相同的“abcdef”,另存为 utf32 little endian,没有 bom。可用here
这是为什么?为什么在使用 std::istreambuf_iterator 时不能一次读取 32 位 std::basic_ifstream。如果这只是要读取一个 char 执行转换为 char32_t,那么模板参数的意义何在?如何使用 std::istreambuf_iterator 一次读取 32 位文件。
#include <iostream>
#include <fstream>
#include <sstream>
int main() {
std::basic_string<char32_t> str = U"abcdef";
std::basic_stringstream<char32_t> data{ str };
//std::basic_ifstream<char32_t> data("test.txt", std::ios::binary);
size_t dist = std::distance(std::istreambuf_iterator<char32_t>(data), std::istreambuf_iterator<char32_t>());
std::cout << dist << std::endl;
return 0;
}
【问题讨论】:
标签: c++