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를 배우는 사람이라 생각하고 풀어 보았습니다.
틀린 부분이 있으면, 과감하게 지적질 해 주세요~~
'WORK > Sotfware' 카테고리의 다른 글
[프로그램] 프로그램 언어를 배우기 위한 자료 링크 (0) | 2018.09.06 |
---|---|
[C] linked list [1] 선행 학습 (0) | 2018.09.05 |
[C언어] 변수 (0) | 2018.08.09 |
[컴포트] USB TO SERIAL virtual comport delete (0) | 2018.04.17 |
[Yocto] Yocto Manual (0) | 2018.04.06 |
댓글