【问题标题】:Issue regarding char datatype in c++关于 c++ 中 char 数据类型的问题
【发布时间】:2020-03-14 07:09:41
【问题描述】:

我理解“char”数据类型用于存储单个字符并使用 1 个字节,但 char16_t、char32_t 和 wchar_t 用于什么?毕竟,我们只需要存储一个字符

【问题讨论】:

  • 如果您的字母表超过 256 个字符怎么办?
  • 它们通常用于存储 unicode 字符。而 utf8 可以使用单字节字符 utf16 和 utf32 需要更多字节。
  • 对不起,我是新手,但我认为字母表只有 1 个字符宽?怎么可能是 256 个字符宽?

标签: c++


【解决方案1】:

关于char16_tchar32_t,引用Microsoft article

char16_t 和 char32_t 类型分别代表 16 位和 32 位宽的字符。编码为 UTF-16 的 Unicode 可以存储在 char16_t 类型中,编码为 UTF-32 的 Unicode 可以存储在 char32_t 类型中。这些类型的字符串和 wchar_t 都称为宽字符串,尽管该术语通常专门指 wchar_t 类型的字符串。

对于wchar_t

wchar_t 类型是实现定义的宽字符类型。在 Microsoft 编译器中,它表示一个 16 位宽的字符,用于存储编码为 UTF-16LE 的 Unicode,即 Windows 操作系统上的本机字符类型。通用 C 运行时 (UCRT) 库函数的宽字符版本使用 wchar_t 及其指针和数组类型作为参数和返回值,本机 Windows API 的宽字符版本也是如此。

所以不能简单的说他们是一个角色。如上所述,类型因编码而异。

例如,char16_t 编码中的字符u (U+0075) 存储为feff0075

【讨论】:

  • 回复:“例如,char16_t 编码中的字符 u 存储为字节 feff0075 (U+0075)”——不完全是。这就是那个字符的 UTF-16 表示。它可以存储在char16_t 中,但char16_t 不限于UTF-16(就像char 不限于ASCII,尽管许多人认为它们是相同的)。您总是必须知道正在使用什么编码。
  • u 存储在单个 char16_t 中,就像 0x0075 一样。 0xfeff 代表 UTF-16 BOM,如果存在的话,将在一个单独的 char16_t 中。
猜你喜欢
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多