2014-09-04 51 views
1

请建议一个有效的方法来从basic_string < char16_t>复制字节到矢量< uint8_t>。复制一个basic_string <char16_t>到矢量<uint8_t>

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

谢谢。

+0

所以,你想在字符串中的每个字符矢量的两个整数? – 2014-09-04 15:03:05

+0

是的。我的字符是UTF-16。所以它是两个字节。 – SkypeMeSM 2014-09-04 18:04:29

回答

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

+0

感谢您的回答。我已经这样做了。但我真的想知道是否有另一种避免reinterpret_casts的方法。 – SkypeMeSM 2014-09-04 18:05:35

+1

@SkypeMeSM我认为在这种情况下reinterpret_cast是完全有效的。毕竟,这正是所做的事情:'char16_t'数组被按位解释为'uint8_t'的数组。 – MatthiasB 2014-09-05 06:51:07

相关问题