gpt4 book ai didi

c++ - 如何使用 Clang 在 C++17 中指定 utf-16 字符串文字的字节顺序?

转载 作者:搜寻专家 更新时间:2023-10-31 02:04:33 27 4
gpt4 key购买 nike

现代 C++ 源代码中允许使用 UTF-16 字符串文字,例如 auto str = u"中国字";

UTF-16 有两种字节顺序:UTF-16LE 和 UTF-16BE。 C++ 标准不指定 UTF-16 字符串文字的字节顺序。所以,我认为它是实现定义的。

有没有办法在编译时指定字节顺序?

最佳答案

u 为前缀的字符串文字是 const char16_t 值的数组:

C++17 [lex.string]/10:

A string-literal that begins with u , such as u"asdf", is a char16_t string literal. A char16_t string literal has type “array of n const char16_t”, where n is the size of the string as defined below; it is initialized with the given characters.

因此,在 Unicode 系统上,引号中的文字等价于:

const char16_t x[] = { 97, 115, 100, 102, 0 };

换句话说,字符串文字的表示与该数组的表示相同。

对于比较复杂的字符串,还是const char16_t的数组;并且每个 c-char 可能有多个代码点,即数组中的元素数可能比字符串中似乎出现的字符数多。


回答标题中的问题:我不知道有任何编译器选项(对于任何编译器)可以让您配置 char16_t 的字节顺序。我希望任何目标系统都对所有整数类型使用相同的字节顺序。 char16_t 应该具有与 uint_least16_t ([basic.fundamental]/5) 相同的属性。

如果您的代码包含字符串文字,并且您想将它们写入一个文件,例如 UTF16-BE,您需要进行通常的字节序检查/调整,以防您的系统存储 char16_t 采用小端格式。

关于c++ - 如何使用 Clang 在 C++17 中指定 utf-16 字符串文字的字节顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53311511/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com