繁体   English   中英

如何在C中将字符串转换为char

[英]How to convert string to char in C

我正在用C编写编译器,需要获取源代码文件中定义的字符的ASCII值。 对于普通字母,这​​很简单,但有没有办法将字符串“\\ n”转换为C中“\\ n”的ASCII数字(需要处理所有字符)?

干杯

如果字符串长度为一个字符,则可以将其编入索引:

char *s = "\n";
int ascii = s[0];

但是,如果您使用的字符集不是ASCII,则上面的代码不会为您提供ASCII值。 如果您需要确保您的代码在如此稀有的机器上运行,您可以自己构建一个ASCII表并使用它。

另一方面,如果你有两个字符,即

char *s = "\\n";

然后你可以做这样的事情:

char c;
c = s[0];
if (c == '\\') {
    c = s[1]; /* assume s is long enough */
    switch (c) {
        case 'n': return '\n'; break;
        case 't': return '\t'; break;
        ...
        default: return c;
    }
}

以上假设您当前的编译器知道'\\n'含义。 如果没有,那么你仍然可以做到。 要了解如何这样做,以及一个引人入胜的故事,请参阅Ken Thompson的“ 信任信任思考”

我正在用C编写一个编译器

在原始C中完成所有操作可能不是一个好主意。使用像Bison这样的东西处理初始解析会好得多。

也就是说,处理\\*转义的最佳方法就是找到每个转义变成什么的查找表。

您需要编写自己的解析器/转换器。 可以在许多地方在线找到转义序列列表。 解析C样式语法非常困难,因此您可能还希望查看现有的免费实现,例如Clang

您需要自己实现。 原因是你正在做的是由你正在编译的语言的String文字语法决定的 (您的编译器在C中实现的事实并不重要。)

存在跨越多种语言的字符串文字的常规转义序列; 例如\\n通常表示ASCII NewLine字符。 但是,这并不意味着这些约定适合您尝试编译的语言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM