代码之家  ›  专栏  ›  技术社区  ›  cdn

将十进制值转换为具有相同可见表示形式的十六进制值

  •  0
  • cdn  · 技术社区  · 6 年前

    我正在做一个微控制器,它只输出十六进制表示的数字。我有十进制计算的数据,是供人阅读和解释的。我的输出是三个十进制数字45、27和91,当我输出这些数字时,得到0x2d、0x1b和0x5b。我可以执行什么操作来将45转换为0x45、27转换为0x27等等。

    2 回复  |  直到 6 年前
        1
  •  2
  •   izlin    6 年前

    如果我理解正确,你想要这样的东西:

    unsigned char convert(unsigned char in) {
        return ((in % 10) * 0x01) + ((in / 10) * 0x10);
    }
    
    int main()
    {
        unsigned char a = 45;
        printf ("0x%02X", convert(a)); // prints "0x45"
        return 0;
    }
    

    它转换十进制值 45 0x45 相当于十进制 69 . 请注意,由于除法,转换函数在微控制器上不是很快。 / .

    它只能打印0到99之间的十进制值,因为只有两个数字可供使用。

        2
  •  1
  •   mostawk    6 年前

    尽管我认为将45转换为0x45不是一个好主意,但方法如下:

    int dec = 45;
    int hex = 0;
    int i = 1;
    while(dec/10 != 0){
        int digit = dec%10;
        hex += digit*i;
        i *=16;
    }
    cout << hex << endl;// if you convert "hex" to hexadecimal, it would be 0x45