在C ++中定义UTF-16BE字符串

时间:2012-01-15 22:38:10

标签: c++ utf-16 endianness

我需要定义看起来像这样的unicode字符串:

const char SOME_STRING[] = { 0, 5, 0, 'M', 0, 'y', 0, 'S', 0, 't', 0, 'r' };

这是UTF-16BE字符串前面包含大端短的包含长度,它在java中使用,这就是我需要它。是否有更好/更清晰的方式来声明它而不是分别键入每个字符?

2 个答案:

答案 0 :(得分:0)

您可以使用wchar_t代替,根据需要转换为字节,例如:

const wchar_t some_string[] = L"\x05MyStr";

int _tmain(int argc, _TCHAR* argv[])
{
    for (int i = 0; i <= some_string[0]; i++)
        printf("%d %d ", some_string[i] >> 8, some_string[i] & 0xFF);

    return 0;
}

答案 1 :(得分:0)

C和C ++没有定义它们运行的​​平台的字节序性质如何工作。因此,语言本身无法将16位值序列声明为“大端”。

您需要做的是获取平台本机端的字符串。如果平台的字节序不是大端,则进行字节交换。您可以将字节交换的版本存储在std::vector或其他类似的文件中。