2015-12-06 2 views
1

J'ai besoin de traiter les données stockées dans des chaînes étendues à un niveau bas. Je suis en mesure de convertir en un vector de Bytes avec la méthode suivante:Conversion C++ entre le vecteur Byte et 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); 

Cependant, je ne parviens pas à aller dans l'autre sens; Je ne suis pas très familier avec le casting. Comment puis-je convertir un vector de Bytes en wstring?

Répondre

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

Vous pouvez le faire comme ça
mystring.assign(reinterpret_cast<wstring::const_pointer>(&byteVector[0]), byteVector.size()/sizeof(wstring::value_type));