我是初学者 - 中级Arduino编码器,试图将我的一个项目的2位十进制转换为十六进制。我制作的代码似乎有效,但它看起来要比它应该的长得多:
int decToHex(int ones, int tens) {
int result = 0x00;
if (tens == 0) {
switch (ones) {
case 0:
result = 0x00;
break;
case 1:
...
case 9:
result = 0x09;
break;
}
} else {
switch (tens) {
case 1:
switch (ones) {
case 0:
result = 0x0A;
break;
case 1:
...
case 9:
result = 0x13;
break;
}
break;
case 2:
...
case 9:
switch (ones) {
...
}
break;
}
}
return result;
}
任何有助于缩短此代码的帮助都将受到高度赞赏。
答案 0 :(得分:0)
输入2位十进制值的简便方法
并将其输出为十六进制值。
unsigned int inputValue = 0;
if( 1 == scanf( "%u", &inputValue ) )
{
if( 99 >= inputValue )
{
printf( %04x\n", inputValue );
}
else
{
// handle range error
}
}
else
{
// handle scanf() failure
}
发布的功能:
char * decToHex(unsigned int ones, unsigned int tens)
{
short int result = 0x0000;
char *hexStr = NULL;
if( NULL != (hexStr = malloc(7) ) )
{
// handle error and exit
}
// implied else, malloc successful
unsigned short int totalValue = ones+ (10*tens);
sprintf( hexStr, "0X%04x", totalValue );
return hexStr;
}
答案 1 :(得分:0)
保持简单。您希望将Int的十六进制表示形式打印为字符串吗?见下文。除了基数10或基数16中的表示之外没有区别。哪个可以打印不同。
int a = 10 * tens + ones;
printf("%x\n", a);
printf("0x%x\n", a);