Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中将字符转换为整数的问题_C_Type Conversion_Integer_Character - Fatal编程技术网

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

C中将字符转换为整数的问题,c,type-conversion,integer,character,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 lett

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

#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;
        }
    }
}
#包括
#包括
#包括
int main()
{
字符字符串[]=“A2”;
字符字母=字符串[0];
字符数=字符串[1];
字符数[]=“12345678”;
字符字母[]=“ABCDEFGH”;
int行;
int列;
对于(int i=0;i<8;i++){
如果(数字==数字[i]){
行=编号;
}
}
}

当我尝试将变量行转换为变量号的整数值时,我得到的是50,而不是2。到目前为止,目标是将变量行转换为字符变量号的准确值,在本例中为2。我有点困惑,为什么变量行是50而不是2。有人能给我解释一下为什么转换不准确吗?

'2'!=2
。ASCII格式的“2”字符是十进制的50(十六进制的0x32)。看


如果您确定它们确实是数字,您可以使用
(数字[i]-“0”)
来获取您要查找的值。

2在您的示例中是一个字符,该字符的值是50,因为这是代表ASCII字符2的字节值的十进制版本。请记住,c是非常低级的,字符本质上与任何其他值相同:一个字节序列。就像字母表示为字节一样,在我们的10进制系统中,字母值的字符表示也是如此。看起来2应该用值2表示,但事实并非如此

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

但是,如果只将一个字符转换为它所表示的十进制值,则可以走捷径。从“0”的值中减去该数字。虽然这些数字不是以10为基数表示的,但它们是按ASCII码顺序排列的。因为在C语言中,字符只是字节值,所以数字字符0-9和0之间的差值就是字符的值

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

如果你明白为什么会这样,你就明白我的意思了

50
是字符
'2'
的数字ASCII值。可能您在
printf
中使用了错误的格式说明符。Google“ascii表”当您希望文本数字的值执行类似
value=digit-'0'的操作时,这是一种常见的习惯用法。这将从数字字符中减去0(48)的ASCII值(如果您使用的是非ASCII系统,则可以减去任何值)。