저희 회사 프로젝트에 넣을려고 만들어본 진수변환 소스입니다..
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);
}
|