二进制整数装换为十六进制

在密码程序中经常需要二进制大整数装换为十六进制,如内存中8位二进制整数 00111111 (63)转化为十六进制的字符串形式“3F”.

这个转换与char a = 63; printf("%02X", a)不同, 其结果为ASCII 值为63的“?”,而不是想要的“3F ”。


#include<stdlib.h>
#include<string.h>

char byte2hex_table[256] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
/**************************************************************************************************
*   1. FILENAME:Byte2Hex.c
*
*   2. int byte2hex(unsigned char * hex_string,unsigned char *byte_list,unsigned int byte_list_length)
*       ---hex_string :获取转换后的十六进制字符串。
*       ---byte_list :需要转换的二进制窜。
*       ---byte_list_length :byte_list的长度,且要求strlen(hex_string)=(byte_list_length*2)+1
* 
*   3. RETURN:成功返回1。失败为1。
*
*   4. 描述:把二进制数转化成ASCII的十六进制字符串。
*            如char * byte_list[2]={00011010,11111111}--->char *hex_string[5]="1aff"
*            可以看出转换后的十六进制字符个数是二进制数所占byte的2倍。(不包括结尾符号)
*
*   5. DATA   : 2017/08/23
*      AUTHOR : KeYu
*
***************************************************************************************************/
int byte2hex(unsigned char * hex_string,unsigned char *byte_list,unsigned int byte_list_length)
{
    unsigned char temp_l,temp_h;
    unsigned int i;

    for( i = 0; i < byte_list_length; i++)
    {   
        temp_l = (byte_list[i] & 0x0F);
        hex_string[2*i+1] = byte2hex_table[temp_l];
    
        temp_h = ((byte_list[i] >> 4) & 0x0F);
        hex_string[2*i] = byte2hex_table[temp_h];
    }   
    hex_string[2*i] = '\0';
    return 1;   
}

int main()
{
    unsigned int byte_list_length = 4;
    unsigned char byte_list[4]={0xaf,0x23,0xee,0xde};
    unsigned char *hex_string = (unsigned char *)(malloc(1+2*byte_list_length));
    byte2hex( hex_string,byte_list, byte_list_length);
    printf("%s\n",hex_string);
}


结果:

keyu0915@keyu0915:~/CAR/STRING$ ./Byte2Hex 
AF23EEDE


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值