大家好(这里是新手),
我在嵌入式系统上工作,我需要将十六进制数转换为ASCII字符串。
请在回答之前阅读以了解我的要求。
e.g。 hexNumber = 0xFF ASCII = 0x32 0x35 0x35
ASCII字节表示十六进制数的十进制值。即0xFF为255,0xFE为254等......
基本上,每个字节应为十六进制数的十进制表示生成3个字节。
不使用键盘输入值,它是从智能卡获得的值。
答案 0 :(得分:6)
您可以使用C风格的sprintf()
:
char buf[4];
sprintf(buf, "%03d", 0xFF & (unsigned)byte_to_convert);
您也可以使用snprintf()
,这在输出格式未修复时通常更安全,但对此应用程序无关紧要。
如果您的嵌入式环境无法承担从库中链接printf
族函数的成本(它们可能相当大),那么使用除法和模数进行转换,如下所示:
char buf[4];
buf[3] = 0; /* NUL trminator */
buf[2] = (unsigned)byte_to_convert % 10 + '0';
buf[1] = (unsigned)byte_to_convert / 10 % 10 + '0';
buf[0] = (unsigned)byte_to_convert / 100 + '0';
答案 1 :(得分:1)
如果有,请使用snprintf()
或sprintf()
。
假设该值是整数变量,请注意它不是“十六进制值”;它只是变量中的数字。它不是以十六进制形式存储在计算机的内存中。
答案 2 :(得分:1)
类似的东西:
int hexNumber = 0xFF;
int i;
char ss[4];
sprintf(ss,"%d",hexNumber);
printf("0x%x: ",hexNumber);
for(i=0;i<3;i++)
printf("0x%x ",ss[i]);
printf("\n");
这将产生:
0xff: 0x32 0x35 0x35