talk2013. 11. 29. 02:10

가끔 프로그램을 짜다 보면 16진수 문자열을 2진수 문자열로 바꾸는 문제가 발생한다.
예를 들어  int a = 'F'; 를 '1111' 로 보기를 원하는 것이다.

표준함수들을 이용하면 간단하게 처리 할 수 있지만 가끔 표준함수를 쓸 수 없을 때 아래를 참고하면 유용하게 사용 할 수 있다.

static unsigned long pow(int a, int b)
{
int result = 1;
for (int i= 0; i < b ; i++)
result *= a;

return result;
}

static unsigned long hex2Num(char* str, int num)
{

unsigned long result = 0;
int tmp = 0;
for (int idx =0; idx < num; idx++)
{
tmp = 0;
if (str[idx] >= '0' && str[idx] <='9')
tmp = str[idx] - '0';
else if (str[idx] >='A' && str[idx] <= 'F')
tmp = str[idx] -'A' + 10;

result += tmp*pow(16, num-idx-1); //자리수 계산
}
return result;
}

void main(void)

{

char a[4] = "ABCD";

unsigned long result = hex2Num(a, 4);

char re[4*4+1] = {'0',};

for ( int i = 15; i >= 0 ; i--)

re[15-i] = ((result & (0x1 << i))? '1': '0');

printf("%s\n", re);

return;
}




Posted by 평면우주