C 获取十六进制数字的字符表示形式(创建字符*以显示十六进制值)

C 获取十六进制数字的字符表示形式(创建字符*以显示十六进制值),c,string,hex,ascii,representation,C,String,Hex,Ascii,Representation,我已经找了大约半个小时了,我似乎找不到一个好的方法来设置一个char*,它指向一个与十六进制字符串相对应的字符串 我只是想澄清一下,我要做的是取一个十六进制字符串(例如0x0043),最后得到一个包含“0x0043”的字符串,可以在LCD显示器上使用,也可以轻松地写入文件 我相信有一个相当简单的方法可以做到这一点,但没有找到线索。有人知道这件事吗 编辑:这是用于嵌入式项目的,因此我无法访问预定义的功能。您是否正在寻找类似以下内容: #include <stdio.h> #defin

我已经找了大约半个小时了,我似乎找不到一个好的方法来设置一个char*,它指向一个与十六进制字符串相对应的字符串

我只是想澄清一下,我要做的是取一个十六进制字符串(例如0x0043),最后得到一个包含“0x0043”的字符串,可以在LCD显示器上使用,也可以轻松地写入文件

我相信有一个相当简单的方法可以做到这一点,但没有找到线索。有人知道这件事吗


编辑:这是用于嵌入式项目的,因此我无法访问预定义的功能。

您是否正在寻找类似以下内容:

#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);
}

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

一次转换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+sizeof(int)+1)是的,(2+sizeof(int)*2+1)差不多。我没有访问stdio头的权限,因为这是用于嵌入式系统显示的。因此,我无法使用sprintf()。
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
  }