У меня есть устройство стороннего производителя, которое связывается с моей коробкой Linux по проприетарному протоколу связи, который плохо документирован. Некоторые пакеты передают «строки», которые после прочтения этой статьи Joel On Software выглядят в кодировке UTF16 Little-Endian. Другими словами, то, что у меня есть на моем компьютере с Linux после получения таких пакетов, это такие вещи, как
// The string "Out"
unsigned char data1[] = {0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00};
// The string "°F"
unsigned char data2[] = {0xb0, 0x00, 0x46, 0x00, 0x00, 0x00};
. Насколько я понимаю, я не могу рассматривать их как std::wstring
, потому что в Linux wchar_t
4 байта. У меня, однако, есть одна вещь, которая заключается в том, что мой Linux-пакет также Little-Endian. Поэтому я считаю, что мне нужно использовать что-то вроде std::codecvt_utf8_utf16<char16_t>
. Однако даже после прочтения документации я не могу понять, как на самом деле перейти от unsigned char[]
к std::string
. Может кто-нибудь помочь, пожалуйста?