【问题标题】:Issue with turning a character into an integer in C在C中将字符转换为整数的问题
【发布时间】:2018-01-25 23:21:53
【问题描述】:

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

#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。到目前为止的目标是将变量行转换为字符变量编号的准确值,在此case 是 2。我对为什么变量 row 是 50 而不是 2 有点困惑。谁能向我解释为什么它不能准确转换?

【问题讨论】:

  • 50 是字符 '2' 的数字 ASCII 值。也许您在printf 中使用了错误的格式说明符。
  • 谷歌'ascii 表'
  • 当您希望文本数字的值执行类似value = digit -'0' 的操作时,这是一个常见的习惯用法。这将从数字字符中减去 ASCII 值 0 (48)(或者如果您有非 ASCII 系统,则该值是什么)。

标签: c type-conversion integer character


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    但是,如果您只是将一个字符转换为它所代表的十进制值,则可以走捷径。从“0”的值中减去数字。尽管这些数字不是由它们为我们人类提供的以 10 为底的值来表示,但它们 在 ASCII 码中按顺序排列。由于在 C 中字符只是字节值,数字字符 0-9 和 0 之间的差异就是字符的值。

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

    如果你明白为什么会这样,你就会明白我在说什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 2011-04-21
      • 2021-08-15
      相关资源
      最近更新 更多