ASCII的十六进制字符串转化成二进制整数

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值