【问题标题】:ASCII to decimal valueASCII 转十进制值
【发布时间】:2015-02-14 13:32:27
【问题描述】:

考虑以下示例:

char a  = '4';

int c = (int)a;   // this gives the hex value of '4' which is 0x34

但我希望将结果 4 作为整数。这个怎么做?只是Hex2Dec 转换?

【问题讨论】:

  • gives the hex value...其实应该是十六进制的ASCII值。
  • omt c = (int)a = '0';从数字转换为二进制。注意 '0' 是 0x30

标签: c type-conversion hex decimal


【解决方案1】:

代表十进制数字的字符按数字顺序排列在 ASCII 空间中。

  • '0' 是 ASCII 0x30
  • '1' 是 ASCII 0x31
  • '2' 是 ASCII 0x32
  • 等等。

这意味着你可以简单地从你的角色中减去'0'来得到你想要的值。

char a = ...;
if (a >= '0' && a <= '9')
{
    int digit = a - '0';
    // do something with digit
}

【讨论】:

  • 不限于 ASCII,而是在符合 C 规范的 all 编码中。 "在源基本字符集和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值都应比前一个字符的值大一。"
【解决方案2】:
int i = a - '0';
printf("%d",i);

数字 09 的字符值是连续的,您可以在此处使用,如上所示。

【讨论】:

    【解决方案3】:

    使用

    char a = '4';     //ASCII value of '4' is 52
    int b = a - '0';  // ASCii value of '0' is 48 so 52-48 will return 4.
    printf("%d", b);  //It will print 4.
    

    【讨论】:

      【解决方案4】:
      • 0 的 ASCII 值 [十六进制] == 30。
      • 9 的 ASCII 值 [十六进制] == 39。

      希望你得到了这种关系。要将character 值作为integer,只需从char 变量本身中减去0 的ASCII 值。差值将与值相同。

      详情请查看ASCII表here

      例如,

      char cInput = `4`;
      int iInput;
      
      iInput = cInput - `0`;
      
      printf("as integer = %d\n", iInput);
      

      将打印4

      【讨论】:

        【解决方案5】:

        关于你的陈述的一些澄清

        这给出了 '4' 的十六进制值

        通过做:

        char a  = '4';
        

        您将“4”的 ASCII 值(映射到 0x34)放入单字节变量“a”中。

        动作:

        int c = (int) a; 
        

        称为强制转换。它所做的是将“a”(一个字节)中的值复制到“c”(4 个字节)中的值中。因此,'c' 中的值将是 0x00000034(其他 3 个字节初始化为零)。

        最后,当你想打印值时,你可以用任何你想要的方式来做。 printf("%d",c); 会给你十进制值 - 52,而 printf("%x",c); 会给你十六进制值。

        干杯,

        【讨论】:

          【解决方案6】:

          ASCII 转换为 a-f、A-F 或 0-9 范围内的字符的值可以使用 switch 语句完成,如以下函数中使用的那样:

          unsigned char convert(unsigned char ch) {
              unsigned char value;
              switch (ch) {
                  case 'A' :
                  case 'B':
                  case 'C':
                  case 'D':
                  case 'E':
                  case 'F': value = ch + 10 - 'A';  break;
                  case 'a':
                  case 'b':
                  case 'c':
                  case 'd':
                  case 'e':
                  case 'f': value = ch + 10 - 'a';  break;
                  default: value = ch - '0';
              }
              return value;
          }
          

          【讨论】:

            猜你喜欢
            • 2014-08-09
            • 1970-01-01
            • 2017-04-16
            • 1970-01-01
            • 2011-08-02
            • 2012-11-14
            • 1970-01-01
            • 1970-01-01
            • 2020-11-20
            相关资源
            最近更新 更多