将basic_string <char16_t>复制到vector <uint8_t> </uint8_t> </char16_t>

时间:2014-09-04 14:59:25

标签: c++ char16-t

请建议一种从basic_string复制字节的有效方法&lt; char16_t&GT;矢量&lt; uint8_t&GT;

我不关心编码,只想将字节复制到bytearray。稍后将使用正确的下游编码进行解释。

感谢。

1 个答案:

答案 0 :(得分:3)

一个选项是获取数据指针,将其转换为新类型并将其分配给目标向量:

std::basic_string<char16_t> src;

const uint8_t *begin = reinterpret_cast<uint8_t const*>(src.data());
const uint8_t *end = reinterpret_cast<uint8_t const*>(src.data() + src.size());
std::vector<uint8_t> dst(begin,end);

这是reinterpret_cast完全有效选择的少数情况之一。来自cppreference(由我添加的重点):

  

static_cast不同,但与const_cast不同,reinterpret_cast表达式不会编译为任何CPU指令。它纯粹是一个编译器指令,它指示编译器将表达式的位序列(对象表示)视为具有类型new_type