Chr*_*ung 128
根据其他回复,这很好:
char c = '5';
int x = c - '0';
Run Code Online (Sandbox Code Playgroud)
另外,对于错误检查,您可能希望首先检查isdigit(c)是否为真.请注意,对于字母,您无法完全相同地执行相同操作,例如:
char c = 'b';
int x = c - 'a'; // x is now not necessarily 1
Run Code Online (Sandbox Code Playgroud)
该标准保证数字'0'到'9'的char值是连续的,但不保证其他字符如字母表的字母.
Joh*_*itb 39
像这样减去'0':
int i = c - '0';
Run Code Online (Sandbox Code Playgroud)
C标准保证该范围内的每个数字'0'..'9'都比其前一个数字(在C99草案的部分5.2.1/3中)大一个数字.C++也是如此.
Chr*_*utz 28
如果,通过一些疯狂的巧合,你想要将一串字符转换为整数,你也可以这样做!
char *num = "1024";
int val = atoi(num); // atoi = ASCII TO Int
Run Code Online (Sandbox Code Playgroud)
val现在是1024.显然atoi()很好,我之前说的只适用于我(在OS X上(也许(在这里插入Lisp笑话))).我听说它是一个粗略映射到下一个示例的宏,它使用strtol()一个更通用的函数来代替转换:
char *num = "1024";
int val = (int)strtol(num, (char **)NULL, 10); // strtol = STRing TO Long
Run Code Online (Sandbox Code Playgroud)
strtol() 像这样工作:
long strtol(const char *str, char **endptr, int base);
Run Code Online (Sandbox Code Playgroud)
它转换*str为a long,将其视为基数base.如果**endptr不为null,则保存找到的第一个非数字字符strtol()(但是谁关心它).
小智 12
将字符数字转换为相应的整数。如下图所示:
char c = '8';
int i = c - '0';
Run Code Online (Sandbox Code Playgroud)
上述计算背后的逻辑是使用 ASCII 值。字符 8 的 ASCII 值为 56,字符 0 的 ASCII 值为 48。整数 8 的 ASCII 值为 8。
如果我们减去两个字符,则字符的 ASCII 之间会发生减法。
int i = 56 - 48;
i = 8;
Run Code Online (Sandbox Code Playgroud)
char numeralChar = '4';
int numeral = (int) (numeralChar - '0');
Run Code Online (Sandbox Code Playgroud)
像这样减去char'0'或int 48:
char c = '5';
int i = c - '0';
Run Code Online (Sandbox Code Playgroud)
要么
char c = '5';
int i = c - 48; // Because decimal value of char '0' is 48
Run Code Online (Sandbox Code Playgroud)