十六进制转十进制

来源:互联网 发布:突破电信80端口限制 编辑:程序博客网 时间:2024/04/28 02:34

花了点时间把 hex 转 dec的代码写了下,特别是 ‘A’ ‘a’ 的操作。


#include<stdio.h>int multiple16(int i){    // 16 will be multipled i times    int sum=1;    if (i == 0)    return 1;     while(--i)        sum *= 16;    return sum;}char transHex(char* hex1){    char hex = *hex1;    if (hex >= 'A' && hex <= 'Z') return hex-'A'+10;    if (hex >= 'a' && hex <= 'z') return hex-'a'+10;    if (hex >= '0' && hex <= '9') return hex-'0';}int hexToDec(char* hex){    int len=strlen(hex);    int sum=0;    // two ways to calculate it#if 0    while(len)    sum += transHex(hex++)* multiple16(len--);#else    while(--len)        sum = (sum + transHex(hex++))* 16;    sum  += transHex(hex);#endif    return sum;}char* decToHex(int dec){    char hex[100]={0};    char ptr[100]={0};    int i=0,j=0;    while(dec){        int tmp= dec%16;        if (tmp >=10)            hex[i++] = tmp-10+'A';        else            hex[i++] = tmp+'0';        dec = dec/16;    }    int len = strlen(hex);#if 0    int ii=0, jj=len-1;    while (ii<=jj)    {        char tmp;        tmp = hex[jj];        hex[jj] = hex[ii];        hex[ii] = tmp;        ii++;        jj--;    }    return hex;#else    while(len--)        ptr[j++] = hex[len];    return ptr;#endif}void main(void){    char *buffer="AB";    int i =88931;    printf("%d\n",hexToDec(buffer));    printf("%s\n",decToHex(i));}


	
				
		
原创粉丝点击