безопасно конвертировать uint8_t в wchar_t

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

Со стороны AIR я получаю строку в uint8_t (вызов функции FRE...). Мне нужно использовать эту строку для записи в реестр, где ожидается wchar_t. Я не уверен, могу ли я просто выполнить приведение типов или создать новый массив wchar[] того же размера и скопировать символы, или мне нужно использовать что-то вроде 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))	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);
...


person sorrex    schedule 18.08.2016    source источник
comment
Интересно, можете ли вы записать массив байтов в std::stringstream, установить локаль строкового потока на utf8 с помощью std::basic_ios::imbue и прочитать обратно как wchar. Если это сработает, пользоваться им будет невероятно просто.   -  person user4581301    schedule 18.08.2016


Ответы (1)


person    schedule
comment
Спасибо. мне помогло. Извините, поскольку новая пчела на доске не может оценивать ответы - person sorrex; 19.08.2016