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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...