将十进制值转换为具有相同可见表示的十六进制值
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
我正在开发一个仅以十六进制表示形式输出数字的微控制器。我有以十进制计算的数据,供人类阅读和解释。我的输出是三个十进制数 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
。
请注意,由于除法 /
.
它只能打印从 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