【问题标题】:What character set does C's "char" use? [duplicate]C的“char”使用什么字符集? [复制]
【发布时间】:2015-10-05 01:56:35
【问题描述】:

简单问题:我最近开始用 C 编程,有一个简单的问题。

C 编程语言在其“char”类型中使用什么字符集,例如 ASCII,还是取决于软件/操作系统?

【问题讨论】:

  • 注意:涉及到两个字符集:用于编码程序的字符集和用于 I/O 的字符集。
  • C 没有字符集。这取决于您正在使用的库/API。标准 C 库使用 ascii;它对编码知之甚少。除了"string" 构造之外,Base C(无标准库)甚至没有“字符串”的概念,当您真正考虑它时,它就是语法糖。
  • @chux-ReinstateMonica :that question 似乎重复了这个问题。由于这个问题也被标记为重复,我把这个问题复制给了家长,你显然不同意。你也想重新回答这个问题吗?

标签: c char


【解决方案1】:

char 本质上是 1 个字节(主要在所有操作系统上)。所以默认情况下它可以存储从 0 到 255 的值。默认情况下它可以表示 ASCII 集和扩展 ASCII 集。

但是,如果您在代码中更改类似这样的语言环境:

char* locale = setlocale(LC_ALL, "");
    if (locale == NULL) {
        printf("Locale not set\n");
    } else {
        printf("Locale set to %s\n", locale);
    }

您可以处理 unicode 输入或 utf8 输入。

因此,默认情况下,字符序列被视为扩展 ascii 集,但如果更改语言环境,则字符序列可以被视为 utf8 字符串或 unicode 字符串,具体取决于语言环境集。

【讨论】:

  • Mostly on all OS 不,在所有操作系统上。这是标准的一部分; sizeof(char) == 1 在所有系统上。 char 是否为 8 位是个问题。
  • C 只要求一个 char 至少有 8 位 (CHAR_BIT >= 8),并且始终可以存储 0 到 127 之间的值,包括 0 到 127。它没有指定 char 是有符号还是无符号。
【解决方案2】:

C 在如此多的系统上运行,以至于没有一个答案。在不了解特定系统的情况下,您可以指望的只有 7 位 ascii,即使是极少数例外。

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多