2015-12-06 170 views
1

我需要處理低級別存儲在寬字符串中的數據。我能轉換成的Bytes一個vector以下方法:C++在Byte向量和wstring之間進行轉換

typedef unsigned char Byte; 

wstring mystring = L"my wide string"; 
Byte const *pointer = reinterpret_cast<Byte const*>(&mystring[0]); 
size_t size = mystring.size() * sizeof(mystring.front()); 
vector<Byte> byteVector(pointer, pointer + size); 

不過,我有麻煩走另一條路;我對鑄造不是很熟悉。如何將vectorBytes轉換爲wstring

回答

2
#include <string> 
#include <codecvt> 

std::wstring wstring_convert_from_char(const char *str) 
{ 
    std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> converter; 
    return converter.from_bytes(str); 
} 

std::string string_convert_from_wchar(const wchar_t *str) 
{ 
    std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> converter; 
    return converter.to_bytes(str); 
} 

std::wstring wstring_convert_from_bytes(const std::vector<char> &v) 
{ 
    std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> converter; 
    return converter.from_bytes(v.data(), v.data() + v.size()); 
} 

std::vector<char> wstring_convert_to_bytes(const wchar_t *str) 
{ 
    std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> converter; 
    std::string string = converter.to_bytes(str); 
    return std::vector<char>(string.begin(), string.end()); 
} 
2

你可以做這樣的
mystring.assign(reinterpret_cast<wstring::const_pointer>(&byteVector[0]), byteVector.size()/sizeof(wstring::value_type));

相關問題