进制转换函数. 二进制与十进制间转换 二进制与十六进制间转换 十进制与十六进制间转换 #include <math.h> s64 _2to10( char* ret, const char *data, int maxlen ); char* _2to16( char* ret, const char *data, int maxlen ); char _10to16( int input, s8 bUpcase ); int _16to10( char c ); s64 _16to10( char* ret, const char *data, int maxlen ); char* _16to2( char* ret, const char* data, int maxlen ); char* _10to2( char *ret, int x ); char* _10to16( char* ret, const char *data, int maxlen ); char* _10to16( char* ret, int data, int maxlen ); // // function s64 _2to10( char* ret, const char *data, int maxlen ) { int nLength = strlen(data); char szResult[16]; memset(szResult,0,sizeof(szResult)); memset(ret,0,maxlen); s64 n=0; for(int i=0;data[i]!='/0';i++) { int j = data[i] - 48; n = n + j * pow(2, (nLength - i - 1)); } itoa((s64)n, szResult, 10); strncpy(ret,szResult,maxlen); return n; } char* _2to16( char* ret, const char *data, int maxlen ) { memset(ret,0,maxlen); const char* p = data; while (*p !='/0') { char szTmp[5]; char x; memset(szTmp,0,sizeof(szTmp)); strncpy(szTmp,p,4); int n = _2to10(NULL,szTmp,0); if(n>=0 && n<=9){ x = '0' + n; strncat(ret,&x,1); } if(n>=10 && n<=15){ x = 'A' + (n - 10); strncat(ret,&x,1); } p = p + 4; } return ret; } char* _16to2( char* ret, const char* data, int maxlen ) { memset(ret,0,maxlen); const char*p = data; if (*(p + 1) == 'x') { p = data + 2; } while((*p) != '/0'){ char szTmp[5]; memset(szTmp,0,sizeof(szTmp)); strcpy(szTmp,"0000"); int ntmp = _16to10(*p); if(ntmp != 0){ _10to2(szTmp,ntmp); } strcat(ret,szTmp); p++; } return ret; } char* _10to2( char *ret, int x ){ ltoa(x,ret,2); return ret; } int _16to10( const char c ){ int v = 0; switch(c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { v = c - '0'; } break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': { v = 10 + c - 'A'; } break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': { v = 10 + c - 'a'; } break; } return v; }; s64 _16to10( char *data ){ s64 x; x = strtol(data,(char**)NULL,16); return x; } s64 _16to10( char* ret, const char *data, int maxlen) { int nLength = strlen(data); char szResult[16]; memset(szResult,0,sizeof(szResult)); memset(ret,0,maxlen); s64 n=0; for(int i=0;data[i]!='/0';i++) { if(data[i]>='0' && data[i]<='9') n=n*16+data[i]-'0'; if(data[i]>+'a' && data[i]<='f') n=n*16+data[i]-'a'+10; if(data[i]>='A' && data[i]<='F') n=n*16+data[i]-'A'+10; } itoa((s64)n, szResult, 10); strncpy(ret,szResult,maxlen); return n; } char* _10to16( char* ret, const char *data, int maxlen) { char szResult[16]; memset(szResult,0,sizeof(szResult)); memset(ret,0,maxlen); int value = atoi(data); sprintf(szResult,"0x%X",value); strncpy(ret,szResult,maxlen); return ret; } char* _10to16( char* ret, int data, int maxlen) { char szResult[16]; memset(szResult,0,sizeof(szResult)); memset(ret,0,maxlen); sprintf(szResult,"0x%X",data); strncpy(ret,szResult,maxlen); return ret; }