嵌入式C语言十六进制字符串形式输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式C语言十六进制字符串形式输出相关的知识,希望对你有一定的参考价值。

最近做的一个项目,要将数据传输至云端服务器,其中用到一个MD5加密,加密完后输出的是十六进制数组,但上传是要一个连续的字符串,例如要将{0xaa,0xbb,0xcc}直接转换为aabbcc进行上传,我看了下,VC里是可以直接取的,我这嵌入式里可能没这个库,一时不知道怎么进行下去,求大神

参考技术A sprintf(buf, "%x%x%x", arr[0], arr[1], arr[2]);
buf为转换后的字符串。可以printf先看下是不是需要的。
如果是64位的十六进制,可以写成
sprintf(buf, "% "PRIx64" % "PRIx64" % "PRIx64" ", arr[0], arr[1], arr[2]);
参考技术B #include<stdio.h>
#define MAX 100
char str[MAX];
char sup[MAX];
char arr[16] = '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f';


int convert_hex2str(int num)

int tmp = num;
int i = 0;

while(num)
int t = num % 16;
sup[i++] = arr[t];
num = num / 16;

sup[i] = 0;
return i;


void conv_arr(int *a, int len)

int inx = 0, i, j;
for(i = 0; i < len; ++i)
int tmp = convert_hex2str(a[i]);
for(j = tmp-1; j >= 0; --j)
str[inx++] = sup[j];

str[inx] = 0;


int main()

int a[] = 0x3a, 0xbb, 0xcc, 26;
conv_arr(a, 4);
printf("%s\\n", str);
return 0;

帮你写了一个数组转字符串的

参考技术C 没有就直接写呗
假设n[i]=0xXY
0xXY%0x10=0x0Y
0xXY/0x10=0x0X
y='a'+0x0Y='y'
x='a'+0x0X='x'
然后x<<4|y得出来就是xy了本回答被提问者采纳

C语言 如何将16进制形式的字符串,转化为相同的16进制的整型?

如何将16进制形式的字符串,转化为相同的16进制的整型。

例如:"0x123"的字符串转化为16进制也为0x123。

如何将16进制形式的字符串,转化为相同的16进制的整型,这个问题,如果是在输出端而言,这本身是不存在的问题。因为要输出十六进制的数,本身就是输出一个字符串,完全不需要转换的。
如果是要转换为在计算机内存储的变量的值,则是提问者对计算机的原理不理解。计算机中所有的数都是以二进制形式存储,才能直接进行计算的。如果是要把十六进制的字符串,转换为数值形式,实际上是转换为十进制值(计算机以二进制存储,十六进制形式是程序员为简便而产生的,它是二进制表示的另一种形式),可以以下面的代码实现:
int str2int(char s[])
int i,f;
for(i=f=0;s[i];i++)
if(s[i]>='0'&&s[i]<='9')f=f*16+s[i]-'0';
else if(s[i]>='a'&&s[i]<='f')f=f*16+s[i]-87;
else if(s[i]>='A'&&s[i]<='F')f=f*16+s[i]-55;
else return f;
追问

你这样只是把代码中字符串“0x123”变成了123 虽然这也是16进制 但是没有0x ,然后把你转化后的数给i,在代码中i=123,它会以十进制给i,虽然给i的只是一个数,存储来说都是二进制,但这里i的大小就是10,也就是0xa,这和所需求的0x123就不符了。 ***需求为:“0x123转换为在计算机内存储的变量的值,但是这里并不是要存”0x123“字符串的值,而是存0x123的值。

追答

我的程序并不是把"0x123"变为123,而是变为0x123的等值十进制值291。因为它在计算机内存储的就是i=291的二进制值,只是在输出时,如果规定以printf("0x%x",i);就会得到输出0x123。

参考技术A 整形就是整数,不分几进制。
几进制只是常量书写形式而已

以上是关于嵌入式C语言十六进制字符串形式输出的主要内容,如果未能解决你的问题,请参考以下文章

C语言 如何将16进制形式的字符串,转化为相同的16进制的整型?

c语言十六进制字符转化成十进制数字问题

C语言:输入一个十六进制字符串,将其转换成为对应的整数并输出转换结果。

C语言编程(将十六进制字符串转换为十进制整数 )

谁知道c语言的格式符,转义字符定义时的英文全拼,例如十进制d是decimal,谢了。有加分哦!

c语言 输入16进制形式的字符串转换成16进制