首页 > 解决方案 > 将字符串中的字符转换为 ASCII

问题描述

我正在为大学项目做一个迷你 C 编译器。

我的问题是:

如何获取字符串中字符的 ascii?

字符串始终采用以下格式: "'{char}'"

例如:

char* c1 = "'a'" #I want the ascii code of char: a

在这种情况下,我可以使用命令获取 ascii 码int(c1[1])

但如果是这样的话:

char* c1 = "'\000'" #I want the ascii code of char: \000

如何获取本案例的ascii码?

是否可以获得适用于所有情况的通用函数?

标签: cstringcharascii

解决方案


如果你想知道字符的代码,一个简单的方法是

char c1 = '\0';
int c1_code = c1;

char c2 = 'a';
int c2_code = c2;

printf("%d %d\n", c1_code, c2_code);

在 ASCII 系统上,这将打印0 97.

但这有点傻。只写会更简单,更直接

int c1_code = '\0';
int c2_code = 'a';

这是因为 C 中有一个超级简单、超级重要的基本定义:

在 C 中,一个字符由一个小整数表示,该整数对应于机器字符集中该字符的值。

在某些语言中,您需要特殊函数在字符和 cheir 字符集值之间来回转换。(我相信 BASIC 使用CHR$andINT$或其他东西。)但在 C 中,您不需要任何特殊处理:字符基本上就是它的值。

如果您想从字符串中查找字符值(不是单个字符,正如我目前所展示的那样),它只涉及一点点。C 中的字符串只是一个字符数组,因此您可以执行以下操作:

字符 str3[] = "a"; int c3_value = str2[0]; /* 字符串中第一个字符的值 */

我可以像这样更简单地打印字符值:

printf("%d %d %d\n", 'a', 'b', 'c');

如果我从用户那里读到一行文字:

char line[100];
printf("type something:\n");
fgets(line, 100, stdin);

我可以像这样打印前几个字符的值:

printf("you typed:\n");
printf("%c = %d\n", line[0], line[0]);
printf("%c = %d\n", line[1], line[1]);
printf("%c = %d\n", line[2], line[2]);

如果你不熟悉 C 的字符处理,我鼓励你写一个像这样的小程序并用它来玩。例如,如果我运行该程序并输入“Hello, world!” 进去,它会打印

You typed:
H = 72
e = 101
l = 108

也许你知道这一切。也许你真的想做类似的事情

char *c1 = "'\\000'";

意思c1是包含六个字符的字符串

' \ 0 0 0 '

并且您想将此字符串解释为 C 字符常量的语法,就像 C 编译器一样。也就是说,也许您基本上是在尝试编写解析字符常量的 C 编译器部分的微型版本。如果是这样,那将是一个完全不同(并且涉及更多)的问题。

显然这就是你想要做的。请参阅我的其他答案


推荐阅读