다들 이런 경험이 있을 것입니다.
char *strTemp = "123456";
char result[10];
이렇게 정의된 문자열(16진수) 값을 실제 메모리 값에 56 34 12 이런 형식으로 저장하고 싶으신
분들이 계실 겁니다.
즉, 문자열로 Hex 값을 입력 받고, 이를 그대로 메모리 데이터로 적혀서 보내고 싶을 때 말입니다.
이 경우, 일반적으로 아래와 같은 코드로 해결 가능합니다.
순서는 다음과 같습니다.
1. 6을 먼저 16진수 코드로 변환합니다. (0x06)이 되겠지요.
2. 이를 result 안에 내용과 OR 연산을 거칩니다.
3. strTemp 길이가 홀수 일때와 짝수일 때를 나누어 4비트 쉬프트 연산을 거칩니다.
4. 그다음 0x0F 와 AND 연산을 거치게 되는 것이지요.
참고로, OR 연산자를 쓰는 이유는 비트가 4비트 쉬프트(>>) 되고,
해당 남은 자리에 16진수 코드((0x00 -> 0x0F)를 써야 하므로, OR 연산자를 거칩니다.
마찬가지로 AND 연산을 거치는 이유는 쉬프트 이동된 왼쭉 자리를 0으로 채우기 위함입니다.
설명이 좀 난해한 경우가 있는데 아래 코드를 보시면 쉽게 이해하실 수 있으리라 생각됩니다.
code.c