如何将数字转换为十进制字符串?

时间:2013-12-04 13:09:31

标签: c++ c ascii hex

大家好(这里是新手),

我在嵌入式系统上工作,我需要将十六进制数转换为ASCII字符串。

请在回答之前阅读以了解我的要求。

e.g。 hexNumber = 0xFF      ASCII = 0x32 0x35 0x35

ASCII字节表示十六进制数的十进制值。即0xFF为255,0xFE为254等......

基本上,每个字节应为十六进制数的十进制表示生成3个字节。

不使用键盘输入值,它是从智能卡获得的值。

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