如何从C 中的8位迭代器中获得16或32位迭代器
How to get 16 or 32 bit iterator from 8 bit iterator in C++?
我编写了代码,使用此库http://utfcpp.sourceforge.net,它转换utf16to8:
ifstream sourceFile("/home/myuser/utf16.txt", std::ifstream::binary);
vector<unsigned char> res;
std::vector<uint16_t> my_buffer;
my_buffer.resize(fileSize/2);
sourceFile.read((char*) my_buffer.data(), fileSize);
utf8::utf16to8(my_buffer.begin(),
my_buffer.end(),
back_inserter(res));
outFile.write((char*)&res[0], res.size());
我的问题:如果我要转换UTF32TO8,我必须编写所有这些代码,但是在向量中使用不同类型的代码:
vector<unsigned char> res;
std::vector<uint32_t> my_buffer;
my_buffer.resize(fileSize/4);
sourceFile.read((char*) my_buffer.data(), fileSize);
utf8::utf32to8(my_buffer.begin(),
my_buffer.end(),
back_inserter(res));
outFile.write((char*)&res[0], res.size());
我正在使用std :: vector和std :: vector,因为lib uf8-cpp需要32和16位迭代器。例如,有什么方法可以从std :: vector获取此迭代器:
std::vector<char> myvector;
std::vector<uint16_t>::iterator u16bit_iterator = myvector.begin(); //this doesn't work now
让我们澄清手头的问题。
您有:
std::vector<uint32_t> in;
std::vector<uint8_t> out;
您希望将in
(UTF-32中的数据(转换为out
(UTF-8中的数据(;in
由32位整数填充,因为utf8::utf32to8
要求这是必需的(另外是有道理的(,并且out
由8位整数(即字节(填充,这也有意义。
现在:
我想重新制作我的代码,仅使用一个向量而不是具有不同类型的两个向量。
撇开这是一个薄弱的需求(现在类型是什么?(这是通过从默认迭代器切换到指针的。迭代器std::vector<T>::iterator
用于在std::vector<T>
时期进行迭代。您对T
的不同选择都是整数都没关系。它们是不同的类型。但是,指针可以用作迭代器(尤其是当您使用连续的数据块(例如向量包含的内容(时(,并且将任意内存重新解释为字节(仅(是合法的。
作为奖励,从文件中阅读会更容易,因为您又回到读取字节(在某种程度上确实更有意义(。
std::vector<uint8_t> in;
std::vector<uint8_t> out;
in.resize(fileSize);
sourceFile.read((char*)&in[0], fileSize);
// Make sure you have a whole number of 32-bit
// blocks, before we interpret them as bytes
assert((in.size() % 4) == 0);
utf8::utf32to8(
(uint32_t*)&in.front(),
(uint32_t*)&in.back(),
std::back_inserter(out)
);
outFile.write((char*)&out.front(), out.size());
我希望我已经正确解释了您的要求。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 不明白迭代器,引用和指针失效,一个例子
- 我可以使用反向迭代器作为ForwardIt吗
- ESP8266单片机矢量迭代器的C++问题
- 如何在C++中将迭代器作为函数参数传递
- 是否应避免从非常量迭代器转换为常量迭代器?
- 如何从C 中的8位迭代器中获得16或32位迭代器
- 迭代器应该读取整个数字,但它只读取第一位数字
- 在使用STL的迭代器上使用UTF-8到UTF-32