2016-08-18 14 views
2

Это мое первое родное расширение между AIR и C++, а также в программировании на C++, поэтому я не уверен, где искать помощь при преобразовании типов.safe convert uint8_t в wchar_t

Со стороны AIR я получаю строку в uint8_t (вызов функции FRE ...). Мне нужно использовать эту строку для записи в реестр, где ожидается wchar_t. Я не уверен, могу ли я просто сделать литье типов или создать новый массив wchar [] того же размера и скопировать символы, или мне нужно использовать someting like MultiByteToWideChar() для преобразования символов UTF-8 в wchar_t. Я не уверен в правильном размере массива вывода в этом случае.

... 
 
FREObject retObj = NULL; 
 
uint32_t strLength = 0; 
 
const uint8_t *path8 = NULL; 
 

 
// this is what I get from actionscript call  
 
FREResult status = FREGetObjectAsUTF8(argv[ARG_PATH], &strLength,  &path8); 
 
if ((status != FRE_OK) || (strLength <= 0) || (path8 == NULL)) \t return retObj; 
 

 

 
LONG hStatus; 
 
HKEY hKey; 
 
wchar_t *path; 
 

 
// ??? how to copy uint_t into wchar_t 
 

 
hStatus = RegOpenKeyEx(HKEY_CURRENT_USER, path, 0, KEY_ALL_ACCESS, &hKey); 
 
...

+0

Wonder, если вы можете написать массив байтов в 'станд :: stringstream', установить локаль stringstream на utf8 с' STD :: basic_ios :: imbue', и читайте как 'wchar'. Если это сработает, оно будет жестоко прост в использовании. – user4581301

ответ

1
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> cv; 
std::wstring dst = cv.from_bytes(src); 
+0

спасибо. это помогло мне. Извините, так как новая пчела на доске не может оценивать ответы – sorrex