【发布时间】:2019-11-08 14:03:11
【问题描述】:
我有一个第 3 方设备,它通过没有很好记录的专有通信协议与我的 Linux 机器通信。一些数据包传送“字符串”,在读取this Joel On Software article 后,似乎采用 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> 之类的东西。然而,即使在阅读the documentation 之后,我也无法弄清楚如何从unsigned char[] 实际转到std::string。有人可以帮忙吗?
【问题讨论】:
标签: c++ string utf-16 unicode-string