【问题标题】:How to convert number to decimal string?如何将数字转换为十进制字符串?
【发布时间】:2013-12-04 13:09:31
【问题描述】:

大家好(这里是新手),

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

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

例如十六进制数 = 0xFF ASCII = 0x32 0x35 0x35

ASCII 字节表示 hexNumber 的十进制值。即 0xFF 是 255,0xFE 将是 254,等等...

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

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

【问题讨论】:

  • 您可以将数字存储为 int,然后将每个数字输出为 char = digit + '0'。
  • 所有值的结果应该是 3 个字节,即 0x3 应该给出“003”还是“3”?
  • 'hexNumber = 0xFF ASCII = 0x32 0x35 0x35' 没有意义
  • @DieterLücking:这些是“255”的 ASCII 值。
  • 将 hexNumber 存储在 int 中。将其作为十进制值打印到字符串(使用 sprintf 或 sstream)。循环遍历字符串中的字符(数字)并将它们打印为十六进制值?

标签: c++ c ascii hex


【解决方案1】:

您可以为此使用 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';

【讨论】:

  • 我喜欢简单的 buf[4](不需要昂贵的 printf)
【解决方案2】:

如果有,请使用snprintf(),或sprintf()

假设该值是一个整数变量,请注意它不是“十六进制值”;它只是变量中的一个数字。它不是以十六进制存储在计算机内存中的。

【讨论】:

    【解决方案3】:

    类似:

    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 
    

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2014-04-28
      • 1970-01-01
      相关资源
      最近更新 更多