본문 바로가기
WORK/Sotfware

[C언어] hex to string convert

by KANG Stroy 2018. 8. 17.
728x90
728x90


Hex 에서 우리가 흔히 보는 문자인 String으로 변환 하는 방법이다. 특정한 함수를 사용 하여 쉽게 변환 할 수 있다. 그런데 모든 제품(컴파일러)에 특정 함수를 쓸 수 있는것은 아니다. 그럼 변환을 어떻게 할까? 


하나의 HEX 값을 보자. 


0x12 


가 있다. 이것을 문자로 출력 하려면 


문자로 표시를 하려면 12 라고 써야 한다. 


표시 하려는 문자를 그대로 표출하기 위해서 "1" 과 "2"를 분리 해야 한다. 


숫자 1은 0X31 / 2는 0x32 가 된다. 


여기서 착안하여 프로그램 짠다. 


char a = 0x31 ; 

char changeData[2]; 


초기화는 생략 한다. 


memset ( changeData , 0 , 2 ) ; // 그래도 한번 해 본다. 


changeData[0] = ( a >> 4 ) & 0x0f;     //     1 값 하나만 changeData[0] 에 입력한다. 

changeData[1] = a & 0x0f;                 //    2 값 하나만 changeData[2] 에 입력한다. 


if ( changeData[0] >= 10 )                 // 10 보다 큰가 ? 왜 10 보다 큰가인가? 

// 숫자 9 다음에 hex는 A가 된다. A는 10 이다.

{

changeData[0] = changeData[0] - 10 + 'A';    // A를 더하는 것이다. A는 HEX로 0x41이다. 

// changeData[0] = changeData[0] - 10 + 0x41;    // 0x41로 써도 된다. 

// 소문자 a는 0x61이 된다.

}

else

{

changeData[0] = changeData[0] + '0';     //  '0' 은 hex로 0x30 이다. 

// 여기 else 문으로 들어온다. 띠로링~~

//changeData[0] = changeData[0] + 0x30;     //  '0' 은 hex로 0x30 이다. 

}


이렇게 되면 changeData[0] 에는 0x31 이 입력이 된다. 



if ( changeData[1] >= 10 )                 // 10 보다 큰가 ? 왜 10 보다 큰가인가? 

// 숫자 9 다음에 hex는 A가 된다. A는 10 이다. 

{

changeData[1] = changeData[1] - 10 + 'A';    // A를 더하는 것이다. A는 HEX로 0x41이다. 

}

else

{

changeData[1] = changeData[1] + '0';     //  '0' 은 hex로 0x30 이다. 

// 여기 else 문으로 들어온다. 띠로링~~ 

}


또 이렇게 하면 changeData[1] 에는 0x32가 들어간다. 


이런 것을 반복해서 쓰려면 for문을 돌린다. 


너무 쉬운걸, 어렵게 설명 했나요? 처음 C를 배우는 사람이라 생각하고 풀어 보았습니다. 


틀린 부분이 있으면, 과감하게 지적질 해 주세요~~ 

728x90

댓글