微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C/C++字符串10进制、16进制、ASSIC的互转

1. 动态的10进制字符串转16进制ASSIC

#include <stdio.h>
#include <string.h>
#include <malloc.h>
char *DecToHex(char *pHex,char *pDec,int Declen)
{
    int       i,Hexlen = Declen *2;
    char        hex[] = "0123456789";
    pHex = (char *)malloc(sizeof(char)*Hexlen);
    for (i = 0; i < Declen; i++)
    {
        *pHex++ = hex[*pDec>>4];
        *pHex++ = hex[*pDec++ & 0x0F];
    }
    *pHex = '\0';
    return pHex -Hexlen;
}
int main()
{
    char Dec[] = "01234";
    char *pHex = NULL;
    printf("-------------10进制字符串----------\n");
    printf("%s\n",Dec);
    printf("-------------16进制字符串----------\n");
    printf("%s\n",DecToHex(pHex,Dec,strlen(Dec)));
    printf("\n\n\n");
}

2. 静态的10进制字符串转16进制ASSIC

#include <stdio.h>
#include <string.h>
#include <malloc.h>
char *DecToHex(char *pHex,Hexlen = Declen *2;
    char        hex[] = "0123456789";
    for (i = 0; i < Declen; i++)
    {
        *pHex++ = hex[*pDec>>4];
        *pHex++ = hex[*pDec++ & 0x0F];
    }
    *pHex = '\0';
    return pHex -Hexlen;
}
int main()
{
    char Dec[] = "01234";
    char Hex[11];
    printf("-------------10进制字符串----------\n");
    printf("%s\n",DecToHex(Hex,strlen(Dec)));
    printf("\n\n\n");
}

3. ASSIC字符串转16进制字符串

使用函数需要注意的是返回的串是在堆上通过 calloc 分配的,所以,记得使用完返回值释放该块,并且将指向该块的指针 =NULL 。 

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 返回之前未释放
}

4. 16进制字符串转ASSIC字符串 

使用函数需要注意的是返回的串是在堆上通过 calloc 分配的,所以,记得使用完返回值释放该块,并且将指向该块的指针 =NULL 。  

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 返回前未释放

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐