有没有办法获取表示特殊字符的字符串的 ascii 值?

Is there a way to get ascii value of a string representing a special character?

我正在开发一个编译器,我只是希望能够以我的语言读取文字 '\n',因为它是 ascii 值 (10)。


但实际上还有更多的转义序列,如 \n,我不想在 C++ 已经完全能够做到这一点的情况下尝试自己解释所有这些。

我基本上需要一种方法来获取 array/string:

const char* s1 = {'\'/* a simple slash */, 'n', '[=10=]'}; // "\n"
std::string s2 = "\x002b"; // {'\', 'x', '0', '0', '2', 'b', '[=10=]'}

并像 C/C++ 编译器那样对待它。


我想要一个标准函数来完成它,或者如果在运行时我可以与 C++ 编译器交互并让它完成这项工作,就像这样:

char c1 = exec("'%s'", s1); // would return '\n' as one character (ascii 10)
char c2 = std::parse_char_literal(s2); // would return '+' (ascii 43)

谢谢。

因此,在 Remy Lebeau 的评论和重新思考之后,我决定编写自己的代码来处理 C/C++ 编译器的大部分功能。
使用 here 中的特殊字符 table 我决定不实现长度超过 1 个字符的特殊字符,因为我很懒。
剩下 \n \t \v \b \r \f \a \ \? \' \" [=11=].


那是我的代码:

char escSeqToChar(std::string v)
{
    if (v[0] == '\' && v.size() == 2)
    {
        switch (v[1])
        {
        case 'n':
            v = "\n"; break;
        case 't':
            v = "\t"; break;
        case 'v':
            v = "\v"; break;
        case 'b':
            v = "\b"; break;
        case 'r':
            v = "\r"; break;
        case 'f':
            v = "\f"; break;
        case 'a':
            v = "\a"; break;
        case '\':
            v = "\"; break;
        case '?':
            v = "\?"; break;
        case '\'':
            v = "\'"; break;
        case '\"':
            v = "\""; break;
        case '0':
            v = "[=10=]"; break;
        default:
            break;
        }
    }
    if (v.size() > 1) printf("ERROR_CHAR_TOO_LONG"); exit(-1);

    return v[0];
}