将字符数字转换为C中的相应整数

Flo*_*low 91 c type-conversion

有没有办法将字符转换为C中的整数?

例如,从'5'5到?

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值是连续的,但不保证其他字符如字母表的字母.

  • @Paul Tomblin:对于数字而不是字母是的,因为正如我在答案中所说的那样,标准保证'0'到'9'是连续的,但不保证其他字符如'a'到'z'. (3认同)
  • 我在这里没有使用 atoi 的地方缺少什么? (2认同)

Joh*_*itb 39

像这样减去'0':

int i = c - '0';
Run Code Online (Sandbox Code Playgroud)

C标准保证该范围内的每个数字'0'..'9'都比其前一个数字(在C99草案的部分5.2.1/3中)大一个数字.C++也是如此.

  • 如果您提到 char/已经/实际上是一个整数,尽管实现定义了符号(即可能有符号或无符号),并且长度为 CHAR_BITS,那么这个答案会更好。 (2认同)

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()(但是谁关心它).

  • atoi的问题在于它使用0作为"在这里找不到数字"值,因此atoi("0")和atoi("one")都返回0.如果这不适用于你的'重新使用它,寻找strtol()或sscanf(). (5认同)

小智 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)

  • 为什么只有我一个人投赞成票?解释非常简单且内容丰富:+1: (2认同)

Kev*_*ner 6

char numeralChar = '4';
int numeral = (int) (numeralChar - '0');
Run Code Online (Sandbox Code Playgroud)


Ari*_*rif 6

像这样减去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)