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

时间:2018-06-20 14:29:54

标签: c++ hex decimal data-conversion

我正在开发一个仅以十六进制表示形式输出数字的微控制器。我有以十进制计算的数据,供人类阅读和解释。我的输出是三个十进制数字45、27和91,当我输出它们时,得到0x2D,0x1B和0x5B。我可以执行什么操作将45转换为0x45,将27转换为0x27,依此类推。

2 个答案:

答案 0 :(得分:2)

如果我对您的理解正确,那么您需要这样的东西:

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之间的十进制值。

答案 1 :(得分:1)

尽管我认为将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