2014-09-04 52 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

相關問題