16進制串與ASCII字符串相互轉換

提供兩個函數,方便十六進制串與ASCII 字符串之間的相互轉換,使用函數須要注意的是返回的串是在堆上經過 calloc 分配的,因此,記得使用完返回值釋放該塊,而且將指向該塊的指針 =NULL 。
// 函數輸入字符串,輸出字符串對應的16進制串
16進制串與ASCII字符串相互轉換 - DH冰 - //... DH冰的安全筆記
char *chstohex ( char* chs )
{
    char hex[16] = { '0', '1', '2', '3', '4', '5', '6', \
        '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F'
    };

    int len = strlen ( chs );
    char* ascii = NULL ;
    ascii = (char*)calloc ( len * 3 + 1, sizeof(char) );            // calloc ascii
    
    int i = 0;
    while( i < len )
    {
        ascii[i*2] = hex[(int)( (char)chs[i] / 16 )] ;
        ascii[i*2 + 1] = hex[(int)( (char)chs[i] % 16 )] ;
        ++i;
    }

    return ascii;                    // ascii 返回以前未釋放
}
// 函數輸入16進制字符串,輸出對應的字符串
char *hextochs ( char* ascii )
{
    int len = strlen ( ascii ) ;
    if( len%2 != 0 )
        return NULL ;
    char *chs = NULL ;
    chs = (char*)calloc( len / 2 + 1, sizeof(char) );                // calloc chs

    int  i = 0 ;
    char ch[2] = {0};
    while( i < len )
    {
        ch[0] = ( (int)ascii[i] > 64 ) ? ( ascii[i]%16 + 9 ) : ascii[i]%16 ;
        ch[1] = ( (int)ascii[i + 1] > 64 ) ? ( ascii[i + 1]%16 + 9 ) : ascii[i + 1]%16 ;
        
        chs[i/2] = (char)( ch[0]*16 + ch[1] );
        i += 2;
    }

    return chs ;            // chs 返回前未釋放
}
安全

 

以上轉自:http://blog.163.com/163_dhbing/blog/static/11738780320091086511358/函數

/*
字符串轉16進制
*/spa

void StrToHex(BYTE *pbDest, BYTE *pbSrc, int nLen)
{
char ddl,ddh;
int i;指針

for (i=0; i<nLen; i++)
{
ddh = 48 + pbSrc[i] / 16;
ddl = 48 + pbSrc[i] % 16;
if (ddh > 57) ddh = ddh + 7;
if (ddl > 57) ddl = ddl + 7;
pbDest[i*2] = ddh;
pbDest[i*2+1] = ddl;
}blog

pbDest[nLen*2] = '\0';
}ci

相關文章
相關標籤/搜索