#include<stdio.h>
#include<string.h>
#include<stdlib.h>
/**********************************************************************
* 1. FILENAME:"hex2byte.c"
*
* 2. unsigned char * hex2byte(char *hex_string,unsigned char *byte_list,unsigned int byte_list_legth)
* ---hex_string :要转换的十六进制字符串。十六进制数位数必须为2*byte_list_length
* ---byte_list:转换后得到的二进制串。
* ---byte_list_length:二进制数长度。
*
* 3. RETURN:成功返回二进制窜的头指针。失败为NULL。
*
* 4. 描述:把ASCII的十六进制字符串转化成二进制数:
* 如char *hex_string[5]="1aff"--->char * byte_list[2]={00011010,11111111}
* 可以看出转换后的二进制数所占的byte是原来十六进制字符个数占的byte的1/2.
*
* 5. 补充:sscanf( char* hex_string, "%02X", int* byte_list) %02X表示读取两个字符,
* 表示一个十六进制的数。如hex_string=“1a” 以00000000 00000000 00000000
* 00011010存入byte_list指向的4个字节的内存。而非 1a对应的 ASCI码值,默认
* 转为4个字节.
*
*
* 6. DATA : 2017/08/23
* AUTHOR : KeYu
***********************************************************************/
unsigned char * hex2byte(char *hex_string,unsigned char *byte_list, unsigned int byte_list_legth)
{
char * temp;
unsigned int i,j,n;
if( strlen(hex_string) != (2*byte_list_legth) )
{
printf("HEXstring_length != 2*BYTEstring_length!\n");
return NULL;
}
temp = hex_string;
for( j = 0; j < byte_list_legth; j++)
{
sscanf( temp, "%02X", &n ); //n必须为unsigned int(因为%X必须要求是整型,而unsigned是防止负数符号扩展问题)
byte_list[j] = (unsigned char)n;
temp += 2;
}
for( i = 0; i < byte_list_legth; i++)
printf("%02X ",byte_list[i]);
return byte_list;
}
int main()
{
size_t byte_list_legth;
byte_list_legth = 8;
char* hex_string = "af193dc12ad791f1";
unsigned char* byte_list = (unsigned char*)(malloc(byte_list_legth));
byte_list = hex2byte(hex_string,byte_list,byte_list_legth);
free(byte_list);
}
ASCII的十六进制字符串转化成二进制整数
最新推荐文章于 2023-12-19 07:00:00 发布