C++ 复制基本字符串<;char16_t>;到向量<;uint8_t>;

C++ 复制基本字符串<;char16_t>;到向量<;uint8_t>;,c++,char16-t,C++,Char16 T,请建议一种将字节从基本字符串复制到向量的有效方法 我不关心编码,只想将字节复制到bytearray。稍后将使用正确的下游编码对其进行解释 谢谢。一个选项是获取数据指针,将其转换为新类型并将其分配给目标向量: std::basic_string<char16_t> src; const uint8_t *begin = reinterpret_cast<uint8_t const*>(src.data()); const uint8_t *end = reinterpre

请建议一种将字节从基本字符串复制到向量的有效方法

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


谢谢。

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

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);
std::基本字符串src;
const uint8_t*begin=reinterpret_cast(src.data());
const uint8_t*end=reinterpret_cast(src.data()+src.size());
std::矢量dst(开始、结束);
这是为数不多的几种情况之一,
reinterpret\u cast
是一个非常有效的选择。来自(我添加的亮点):

static\u cast
不同,但与
const\u cast
类似,reinterpret\u cast表达式不会编译为任何CPU指令。它纯粹是一个编译器指令,指示编译器将表达式的位序列(对象表示)视为具有类型
new\u type


所以你想在向量中为字符串中的每个字符加两个整数?是的。我的字符是UTF-16。所以是两个字节。谢谢你的回答。我是那样做的。但我真的想知道是否有其他方法可以避免重新解释投射。@SkypeMeSM我认为在这种情况下,重新解释投射是完全有效的。毕竟,这正是要做的:一个
char16\u t
数组按位解释为一个
uint8\u t
数组。