c - 将字符串中的字符转换为 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码?
是否可以获得适用于所有情况的通用函数?
解决方案
如果你想知道字符的代码,一个简单的方法是
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 编译器部分的微型版本。如果是这样,那将是一个完全不同(并且涉及更多)的问题。
显然这就是你想要做的。请参阅我的其他答案。
推荐阅读
- macos - 窗口关闭和恢复
- google-cloud-sql - 如果为 Google Cloud SQL 增加内存,则会导致停机
- python - 如何在录制过程中创建常规视频块?
- google-sheets - 谷歌工作表,选择命名范围内的列
- reactjs - 如何将函数传递给 React-Navigation 5.x 中的路由?
- html - 如何在html中显示一个参数是关键的数组
- reactjs - Dialog 组件内的 PanelStack 组件
- delphi - 使用 TWriter.WriteString 节省了两个额外的字节
- javascript - 是否可以将 PHP 前端渲染到 Vue 节点中?
- git - Git:如何在更改其 EOL 后恢复文件历史记录责备轨道?