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