【问题标题】:How to know if ASCII is used?如何知道是否使用了 ASCII?
【发布时间】:2012-06-16 12:17:42
【问题描述】:

我进行了一些研究,但没有找到问题的答案。我想知道如何确定 C 程序中使用的字符集是否为 ASCII。有没有预处理器常量?

非常感谢。

【问题讨论】:

    标签: c character-encoding ascii


    【解决方案1】:

    C 说:

    (C99, 5.2.1p1) "执行字符集成员的值是实现定义的。"

    例如gcc 说:

    执行字符集(C90 和 C99 5.2.1)成员的值。 由 ABI 确定

    http://gcc.gnu.org/onlinedocs/gcc/Characters-implementation.html

    所以gcc 指向操作系统文档。

    【讨论】:

      【解决方案2】:

      据我所知,ASCII 字符集的范围是 0 - 127,而其他字符集小于零。

      【讨论】:

      • UTF-8 并非严格意义上的“低于零”。任何 ASCII 也是有效的 UTF-8。
      • 并且char 可以是无符号的,在这种情况下,其他字符大于 127,而不是小于零。原则上,C 实现需要对 0-127 的值使用 ASCII,例如,已经有使用 EBCDIC 的实现。
      【解决方案3】:

      这取决于您使用的工具链,您可以在工具链文档中找到它。例如,vc++ 为 unicode 构建定义 _UNICODE。

      【讨论】:

        【解决方案4】:

        很容易自己构造一个预处理器宏。像下面这样的东西应该可以解决问题:

        #define HAVE_ASCII (('\x41' == 'A') && ('\x61' == 'a') && ('\x30' == '0'))
        
        #if !HAVE_ASCII
        # error "we need ascii"
        #endif
        

        如果您想非常小心,您可以在宏中列出所有可打印的 ASCII,但这里应该已经足以与 EBCDIC 区分开来。如果您只是确定您是否在 EBDIC 系统上,则更容易:)

        #define HAVE_EBCDIC (('Z' - 'A') != 25)
        

        【讨论】:

          猜你喜欢
          • 2016-10-20
          • 1970-01-01
          • 2017-10-07
          • 2016-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多