| 
저희 회사 프로젝트에 넣을려고 만들어본 진수변환 소스입니다..
 2,8,10,16<->2,8,10,16 상호변환이 가능합니다..
 단 16진수입력시에 0x를 빼고 하시면 됩니다.
 
 사용방법은
 
 void main(void)
 {
 char *base1, *base2;
 
 base1 = BaseConverter(16, "ffffff", 10);
 printf("%s",base1);
 
 base2 = BaseConverter(16, "ffffff", 2);
 printf("%s",base2);
 
 free(base1);
 free(base2);
 }
 
 위는 16진수 ffffff를 10진수와 2진수로 변환하여 주는 예제입니다..
 
 
 
 char *Dec2Bin(unsigned long  value)
 {
 int temp[MAX_SIZE], i;
 char result[MAX_SIZE];
 char bin[MAX_SIZE];
 
 for(i=255; i>=0; i--) {
 temp[i]=value&1;
 value=value>>1; //오른쪽으로 한 비트만 이동하여 2진수를 만든다.
 }
 
 for(i=0;i<=255;i++) {
 if(temp[i]==0)
 result[i] = '0';
 if(temp[i]==1)
 result[i] = '1';
 result[i+1]=NULL;
 }
 
 // 2진수 앞의 0은 짤라냄
 int n;
 for(n=0;n<=255;n++) {
 if(result[n]=='1')
 break;
 }
 int x=0;
 for(int i=n;i<=255;i++) {
 bin[x] = result[i];
 bin[x+1] = NULL;
 x++;
 }
 
 return strdup(bin);
 }
 
 // 진법 변환 2,8,10,16 <-> 2,8,10,16
 char *BaseConverter(int rsc, char *data, int obj)
 {
 char *endptr;
 unsigned long decvalue;
 char temp[1024];
 int i;
 
 for(i=0;i<1024;i++)temp[i]=NULL;
 
 // 무조건 10진수로 변경을 함
 decvalue = strtoul(data, &endptr, rsc);
 
 switch(obj) {
 case 2:
 sprintf(temp, "%s", Dec2Bin(decvalue));
 break;
 case 8:
 sprintf(temp, "%o", decvalue);
 break;
 case 10:
 sprintf(temp, "%lu", decvalue);
 break;
 case 16:
 sprintf(temp, "%x", decvalue);
 break;
 }
 
 return strdup(temp);
 }
 |