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