#include "string.h" char RETVAL[36]; void strcpyl(char* src, char* dest, int max) { for(int i=0; i9?((val)+'a'-10):((val)+'0')) #define decdigit(val) ((val)+'0') char* itohex(int val, int digits) { for(int i=0; i>4*i; RETVAL[digits-i-1]=hexdigit(part&0xf); } RETVAL[digits]='\0'; return RETVAL; } char* itobin(int val, int digits) { for(int i=0; i>i; RETVAL[digits-i-1]=decdigit(part&0x1); } RETVAL[digits]='\0'; return RETVAL; } char* itodec(int val) { int pos=31; int neg=0; RETVAL[32]='\0'; if(val==0) { RETVAL[31]='0'; return RETVAL+31; } else if(val<0) { neg=1; val=-val; } while(val) { RETVAL[pos--]=decdigit(val%10); val/=10; } if(neg) { RETVAL[pos--]='-'; } return RETVAL+pos+1; } #define digitval(digit) (((digit)>='a')?((digit)-'a'+10):((digit)>='A')?((digit)-'A'+10):(digit)-'0') #define isDec(c) (((c)>='0'&&(c)<='9')) #define isHex(c) (((c)>='A'&&(c)<='F')||((c)>='a'&&(c)<='f')||isDec((c))) #define isBin(c) ((c)=='0'||(c)=='1') int hextoi(char* str) { int val=0; while(isHex(*str)) { val<<=4; val|=digitval(*str); str++; } return val; } int dectoi(char* str) { int val=0; int sgn=*str=='-'?-1:1; if(*str=='-'||*str=='+') str++; while(isDec(*str)) { val*=10; val|=digitval(*str); str++; } return val*sgn; } int bintoi(char* str) { int val=0; while(isBin(*str)) { val<<=1; val|=digitval(*str); str++; } return val; }