2015-12-06 7 views
1

Мне нужно обработать данные, хранящиеся в широких строках, на низком уровне. Я в состоянии преобразовать в vector из Bytes со следующим методом:Преобразование C++ между байтовым вектором и 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); 

Однако, у меня возникли проблемы в другую сторону; Я не очень хорошо знаком с кастингом. Как преобразовать vector из Bytes в 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));