在C中如何将ASCII字符转换为int型?
vfwfrxfs1#
关于:
int a_as_int = (int)'a';
btxsgosb2#
我同意Ashot和Cwan,但是也许你喜欢把一个像“7”这样的ASCII密码转换成一个像7这样的整数?那么我建议:
char seven = '7'; int i = seven - '0';
或者,你得到了警告,
int i = (int) (seven - '0');
评论后更正,谢谢。
3df52oht3#
您是否正在搜索:
int c = some_ascii_character;
或仅转换而不赋值:
(int)some_ascii_character;
ar7v8xwq4#
使用ASCIIto Integer atoi()函数,该函数接受字符串并将其转换为整数:
atoi()
#include <stdlib.h> int num = atoi("23"); // 23
如果字符串包含小数,则数字将被截断:
int num = atoi("23.21"); // 23
o3imoua45#
C中的char值可以隐式转换为int。例如,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类型)。
char c; ... printf("%d", c)
c
int i = c;
i
(int)c
c - '0'
'0'
jtoj6r0c6#
你是指ASCII序数值吗?尝试如下类型转换:
int x = 'a';
mfpqipee7#
就像其他人告诉你的那样,你可以直接转换它...除非你的意思是“我怎样才能把一个ASCII扩展字符转换成它的UTF-16或UTF-32值”。这是一个完全不同的问题(至少一样好)。如果我没记错的话,如果你只使用“纯”C,这是一个相当困难的问题。那么你可以从这里开始:https://stackoverflow.com/questions/114611/what-is-the-best-unicode-library-for-c/114643#114643(for ASCII扩展我指的是ASCII集的许多“扩展”之一。基本ASCII集的0-127个字符可以直接转换为Unicode,而128-255个字符则不能。)例如,ISO_8859-1 http://en.wikipedia.org/wiki/ISO_8859-1是7位ASCII集的8位扩展,或(相当有名的)代码页437和850。
mmvthczy8#
这在C99标准库中是不可能的,除非您手动编写从字符常量到相应ASCII int值的Map。
C语言中的字符常量(如'a')不一定是ASCII。C99只对那些常量做了一些保证,例如digits be contiguous。ASCII一词只出现在C99 N1256 standard draft的脚注中,脚注73说:在使用七位US ASCII字符集的实现中,打印字符是其值位于从0x 20(空格)到0x 7 E(代字号)的那些字符;控制字符是其值位于从0(NUL)到0x 1F(US)的那些字符和字符0x 7 F(DEL)。这意味着ASCII不是唯一的可能性
'a'
8条答案
按热度按时间vfwfrxfs1#
关于:
btxsgosb2#
我同意Ashot和Cwan,但是也许你喜欢把一个像“7”这样的ASCII密码转换成一个像7这样的整数?
那么我建议:
或者,你得到了警告,
评论后更正,谢谢。
3df52oht3#
您是否正在搜索:
或仅转换而不赋值:
ar7v8xwq4#
使用ASCIIto Integer
atoi()
函数,该函数接受字符串并将其转换为整数:如果字符串包含小数,则数字将被截断:
o3imoua45#
C中的char值可以隐式转换为int。例如,
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类型)。jtoj6r0c6#
你是指ASCII序数值吗?尝试如下类型转换:
mfpqipee7#
就像其他人告诉你的那样,你可以直接转换它...除非你的意思是“我怎样才能把一个ASCII扩展字符转换成它的UTF-16或UTF-32值”。这是一个完全不同的问题(至少一样好)。如果我没记错的话,如果你只使用“纯”C,这是一个相当困难的问题。那么你可以从这里开始:https://stackoverflow.com/questions/114611/what-is-the-best-unicode-library-for-c/114643#114643
(for ASCII扩展我指的是ASCII集的许多“扩展”之一。基本ASCII集的0-127个字符可以直接转换为Unicode,而128-255个字符则不能。)例如,ISO_8859-1 http://en.wikipedia.org/wiki/ISO_8859-1是7位ASCII集的8位扩展,或(相当有名的)代码页437和850。
mmvthczy8#
这在C99标准库中是不可能的,除非您手动编写从字符常量到相应ASCII int值的Map。
C语言中的字符常量(如
'a'
)不一定是ASCII。C99只对那些常量做了一些保证,例如digits be contiguous。
ASCII一词只出现在C99 N1256 standard draft的脚注中,脚注73说:
在使用七位US ASCII字符集的实现中,打印字符是其值位于从0x 20(空格)到0x 7 E(代字号)的那些字符;控制字符是其值位于从0(NUL)到0x 1F(US)的那些字符和字符0x 7 F(DEL)。
这意味着ASCII不是唯一的可能性