如何在C语言中将ASCII字符转换为整数?
怎么样:
int a_as_int = (int)'a';
我同意Ashot和Cwan的观点,但也许你想将类似于“7”的ASCII密码转换为数字“7”?
那么我建议使用:
char seven = '7';
int i = seven - '0';
或者,你可能会收到警告。
int i = (int) (seven - '0');
在评论后进行了更正,感谢提供意见。
你是在寻找这个吗:
int c = some_ascii_character;
或者只是进行转换而不赋值:
(int)some_ascii_character;
使用将字符串转换为整数的ASCII to Integer atoi()
函数:
#include <stdlib.h>
int num = atoi("23"); // 23
如果字符串包含小数,则数字将被截断:
int num = atoi("23.21"); // 23
char c; ... printf("%d", c)
会打印出c
的十进制ASCII值,而int i = c;
则将c
的ASCII整数值放入i
中。你也可以使用(int)c
来显式地进行转换。如果你的意思是要将ASCII数字转换为int类型,那么可以使用c - '0'
,它会将c
隐式转换为int类型,然后减去'0'
的ASCII值,即48(在C语言中,像'0'
这样的字符常量因历史原因被定义为int类型,而不是char类型)。int x = 'a';
就像其他人告诉你的那样,你可以直接转换它...除非你的意思是“如何将ASCII扩展字符转换为其UTF-16或UTF-32值”。这是一个完全不同的问题(至少同样好)。如果我没记错的话,这个问题相当困难,如果你只使用“纯”C。然后你可以从这里开始:https://stackoverflow.com/questions/114611/what-is-the-best-unicode-library-for-c/114643#114643
(对于ASCII扩展,我指的是许多对ASCII集的“扩展”。基本ASCII集的0-127个字符可以直接转换为Unicode,而128-255个字符则不能。)例如ISO_8859-1 http://en.wikipedia.org/wiki/ISO_8859-1 是7位ASCII集的8位扩展,或者是(相当著名的)代码页437和850。
使用C99标准库不可能实现,除非您手动编写从字符常量到相应ASCII int值的映射。
C中的字符常量(如'a'
)不能保证是ASCII。
C99仅对这些常量做出了一些保证,例如数字连续。
单词ASCII仅在C99 N1256标准草案的页脚注释中出现,页脚注释173)说:
在使用七位US ASCII字符集的实现中,打印字符是那些值从0x20(空格)到0x7E(波浪号)的字符;控制字符是那些值从0(NUL)到0x1F(US)的字符,以及字符0x7F(DEL)。
这意味着ASCII并不是唯一的可能性。
(int)'a' == 0x61
不是保证的,并解释一下我的引用是指什么吗? - Ciro Santilli OurBigBook.com