将2位十进制转换为十六进制

时间:2016-10-26 03:51:08

标签: c++ c arduino data-conversion

我是初学者 - 中级Arduino编码器,试图将我的一个项目的2位十进制转换为十六进制。我制作的代码似乎有效,但它看起来要比它应该的长得多:

int decToHex(int ones, int tens) {
  int result = 0x00;
  if (tens == 0) {
    switch (ones) {
      case 0:
        result = 0x00;
        break;
      case 1:
        ...
      case 9:
        result = 0x09;
        break;
    }
  } else {
    switch (tens) {
      case 1:
        switch (ones) {
          case 0:
            result = 0x0A;
            break;
          case 1:
            ...
          case 9:
            result = 0x13;
            break;
        }
        break;
      case 2:
        ...
      case 9:
        switch (ones) {
          ...
        }
        break;

    }
  }
  return result;
}

任何有助于缩短此代码的帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

输入2位十进制值的简便方法

并将其输出为十六进制值。

unsigned int inputValue = 0;

if( 1 == scanf( "%u", &inputValue ) )
{
    if( 99 >= inputValue )
    {
        printf( %04x\n", inputValue );
    }

    else
    {
         // handle range error
    }
}

else
{
    // handle scanf() failure
}

发布的功能:

char * decToHex(unsigned int ones, unsigned int tens) 
{
    short int result = 0x0000;
    char *hexStr = NULL;

    if( NULL != (hexStr = malloc(7) ) )
    {
        // handle error and exit
    }

    // implied else, malloc successful

    unsigned short int totalValue = ones+ (10*tens);

    sprintf( hexStr, "0X%04x", totalValue );

    return hexStr;
}

答案 1 :(得分:0)

保持简单。您希望将Int的十六进制表示形式打印为字符串吗?见下文。除了基数10或基数16中的表示之外没有区别。哪个可以打印不同。

int a = 10 * tens + ones;

printf("%x\n", a);
printf("0x%x\n", a);