如何检查字符常量是否符合ASCII?

ein*_*ica 3 c c++ ascii ebcdic language-lawyer

对早期版本的评论这个回答我的提醒我的事实,我不能想当然地认为'A','B','C'等有连续的数值.我有点假设C或C++语言标准保证这是这种情况.

那么,我该如何确定连续字母字符的值本身是否连续?或者更确切地说,我如何确定单引号内可以表达的字符常量是否具有数字值的ASCII代码?

我问的是如何在C和C++中做到这一点.显然C语言也适用于C++,但是如果有一个C++ ish工具来做这个我也对它感兴趣.另外,我问的是最新的相关标准(C11,C++ 17).

πάν*_*ῥεῖ 6

您可以使用预处理器检查特定字符是否映射到字符集:

#include <iostream>
using namespace std;

int main() {
    #if ('A' == 65 && 'Z' - 'A' == 25)
    std::cout << "ASCII" << std::endl;
    #else
    std::cout << "Other charset" << std::endl;
    #endif
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

缺点是,您需要事先知道映射的值.

数字字符'0'- '9'保证以连续顺序BTW出现.

  • @BenjaminLindley:你*可以*检查每一个角色,但在实践中,一个角色就足够了. (2认同)
  • @πάνταῥεῖ一个更健壮的检查可以是`#if('A'== 65 &&'Z' - 'A'== 25)` (2认同)