操作单个宽字符

Manipulating a single wide char

快速提问,将我的 15k 行框架移植到 UTF16 :)

我会像这样操纵单个 wchar_t 吗?

wchar_t Help[128];
Help[0] = '?'
Help[1] = '/0'

wchar_t Help[128];
Help[0] = L'?'
Help[1] = L'/0'

你不应该直接将 char 分配给没有 type-cast 的 wchar_t,否则编译可能会发出有关数据丢失的警告。

如果不为字符文字添加前缀,它将具有类型 char,因此 Help[0] = '?' 将无法编译。

如果你用 L 作为字符字面量的前缀,它将具有 wchar_t 类型,因此 Help[0] = L'?' 将编译。

请注意,wchar_t 并非在所有平台上都是 16 位的。它在 Windows 上,但在许多其他平台上,它是 32 位的,因此将用于 UTF-32 而不是 UTF-16。如果你想在所有平台上使用 UTF-16,你应该使用 char16_tu 文字前缀,它们在 C11 中被引入:

char16_t Help[128];
Help[0] = u'?';
Help[1] = u'[=10=]';