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

Converting a decimal value into a hex value with the same visible representation

我正在开发一个仅以十六进制表示形式输出数字的微控制器。我有以十进制计算的数据,供人类阅读和解释。我的输出是三个十进制数 45、27 和 91,当我输出这些时我得到 0x2D、0x1B 和 0x5B。 45转0x45,27转0x27等等,可以做哪些操作呢

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

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。 请注意,由于除法 /.

,convert 函数在微控制器上并不是很快

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

虽然我认为将 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