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