字符串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,char *pDec,int Declen)
{
?? ?int ? ? ? i,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",Dec);
?? ?printf("-------------16進制字符串----------\n");
?? ?printf("%s\n", DecToHex(Hex,Dec,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 返回前未釋放
}?
總結
以上是生活随笔為你收集整理的字符串10进制、16进制、ASSIC的互转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nmap的高级扫描(脚本)
- 下一篇: ssh远程连接(ubuntu、windo