[英]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.