在 C11 中,支持可移植的宽字符类型char16_t
,并char32_t
分别添加了 UTF-16 和 UTF-32。
然而,在技术报告中,并没有提到这两种类型的字节序。
例如,以下代码片段在gcc-4.8.4
我的 x86_64 计算机上编译时使用-std=c11
:
#include <stdio.h>
#include <uchar.h>
char16_t utf16_str[] = u"十六"; // U+5341 U+516D
unsigned char *chars = (unsigned char *) utf16_str;
printf("Bytes: %X %X %X %X\n", chars[0], chars[1], chars[2], chars[3]);
会产生
Bytes: 41 53 6D 51
这意味着它是小端的。
char16_t
但是这种行为是否依赖于平台/实现:它是否始终遵守平台的字节序,或者某些实现可能选择始终char32_t
以大字节序实现?