【问题标题】:Getting a Character Representation of Hexadecimal Digit (Creating a char* to display a Hex Value)获取十六进制数字的字符表示(创建 char* 以显示十六进制值)
【发布时间】:2014-12-20 21:06:36
【问题描述】:

我一直在寻找大约半小时,但我似乎找不到一个好的过程来设置一个指向对应于十六进制字符串的字符串的 char*。

澄清一下,我要做的是获取一个十六进制字符串(例如 0x0043)并最终得到一个包含“0x0043”的字符串,该字符串可用于 LCD 显示器或写入轻松归档。

我确信有一种相当简单的方法可以做到这一点,但没有找到任何线索。有知情者吗?

编辑:这是一个嵌入式项目,所以我无法访问预定义的函数。

【问题讨论】:

    标签: c string hex ascii representation


    【解决方案1】:

    一次转换 1 个十六进制数字。

    void foo(unsigned x) {
      char buf[2 + sizeof x * 2 + 1];
      char *p = &buf[sizeof buf - 1];
      *p-- = '\0';
      do {
        *p-- = "0123456789ABCDEF"[x&15];
        x >>= 4;
      } while (p != &buf[1]);
      *p-- = 'x';
      *p = '0';
      // Use p
      }
    

    【讨论】:

      【解决方案2】:

      您是否正在寻找这样的东西:

      #include <stdio.h>
      
      #define MAX_HEX_LENGTH 10
      
      int main()
      {
             int x = 0x0043;
             char str[MAX_HEX_LENGTH];
      
             sprintf(str, "0x%.*x", MAX_HEX_LENGTH, x);
             printf("%s\n", str);
      }
      

      输出:

      0x0000000043
      

      您可以将值 MAX_HEX_LENGTH 更改为您想要的任何值。

      【讨论】:

      • 哦,是的,这只是我捡到的一个随机值。理想情况下,它应该取决于您使用的整数的大小。正如你提到的, (2 + sizeof(int) + 1)
      • 是的,(2 + sizeof(int) * 2 + 1)
      • 差不多。我无权访问 stdio 标头,因为这是用于嵌入式系统显示的。结果我无法使用 sprintf()。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 2011-03-31
      • 2016-06-11
      • 1970-01-01
      • 2011-10-02
      • 2014-03-11
      • 2012-12-07
      相关资源
      最近更新 更多