C语言用sscanf把16进制src字符串转为16进制数组dest 比如:“1234” 转为 {0x12,0x34}

改进:转换后可以放在原数组里,以节约资源。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//把16进制src字符串转为16进制数组dest 比如:“1234” {0x12,0x34} 返回长度
unsigned int HexStringtoByte(char *dest, char *src)
{
	unsigned int i = 0;
	int j=0;
    unsigned int length=strlen(src)/2;
	for (; i < length; i++)
	{
		sscanf(src + 2 * i, "%02X", &j); //j是4个字节,j来临时中转
		*(dest+i)=(char)j;
	}
    return length;
}
int main()
{
	unsigned int i;
	char src[]="123400";
 
	unsigned int length=HexStringtoByte(src,src);//转换后放在原数组里,可能存在0x00,转换后长度不能用strlen来求了。
	for(i=0;i<length;i++)
	{
		printf("%02X\n",src[i]); //12 34 00
	}
	return 0;
}

原创原版:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//把16进制src字符串转为16进制数组dest 比如:“1234” {0x12,0x34}  返回长度
int HexStringtoByte(char *dest, char *src)
{
    char i = 0;
    int length=strlen(src)/2;
    for (; i < length; i++)
    {
        sscanf(src + 2 * i, "%02X", (int *)(dest+i));
    }
    return length;
}
int main()
{
	char dest[2000]={0};
	char src[]="383132";
	HexStringtoByte(dest,src);
	printf("%02X %02X %02X\n",dest[0],dest[1],dest[2]); //38 31 32
	return 0;
}

 

发布了331 篇原创文章 · 获赞 140 · 访问量 71万+

猜你喜欢

转载自blog.csdn.net/chenhao0568/article/details/103368558
今日推荐