操作单个宽字符
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_t
和 u
文字前缀,它们在 C11 中被引入:
char16_t Help[128];
Help[0] = u'?';
Help[1] = u'[=10=]';
快速提问,将我的 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_t
和 u
文字前缀,它们在 C11 中被引入:
char16_t Help[128];
Help[0] = u'?';
Help[1] = u'[=10=]';