将字符转换为C中的整数的问题

时间:2018-01-25 23:21:54

标签: c type-conversion integer character

我遇到将字符变量转换为整数变量的问题。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
    char string[] = "A2";
    char letter = string[0];
    char number = string[1];
    char numbers[] = "12345678";
    char letters[] = "ABCDEFGH";
    int row;
    int column;

    for(int i = 0; i < 8; i++){
        if(number == numbers[i]){
            row = number;
        }
    }
}

当我尝试将变量行转换为变量数的整数值时,而不是2我得到50.到目前为止的目标是将变量行转换为字符变量号的准确值,在此情况是2.我很困惑为什么变量行是50而不是2.可以任何人向我解释为什么它没有准确转换?

2 个答案:

答案 0 :(得分:4)

'2' != 2。 ASCII中的“2”字符为十进制50(十六进制为0x32)。见http://www.asciitable.com/

如果你确定它们真的是数字,你可以使用(numbers[i] - '0')来获得你正在寻找的价值。

答案 1 :(得分:2)

在您的情况下,

2是一个字符,并且该字符的值为50,因为它是表示ASCII中字符2的字节值的十进制版本。请记住,c是非常低级别,字符与任何其他值基本相同:字节序列。就像字母表示为字节一样,它们在我们的基本10系统中的值的字符表示也是如此。似乎2应该用值2表示,但它不是。

如果使用atoi函数,它将查看字符串并计算字符串中字符所代表的十进制值。

但是,如果您只将一个字符转换为它所代表的十进制值,则可以采用捷径。从&#39; 0&#39;的值中减去数字。虽然数字不是由它们对我们人类的基数10值表示的,但它们中按顺序在ASCII代码中排序。因为在C中,字符只是字节值,数字字符0-9和0之间的差异是字符的值。

char c = '2'; 
int i = c - '0';

如果你明白为什么会起作用,你会得到我所说的。