문자열 아스키 변환
출처
https://reakwon.tistory.com/195
소스코드
#include <stdio.h>
#include <stdint.h>
#include <string.h>
//입력의 str은 모두 대문자인 16진수 변환가능한 문자열이라고 가정
//size는 str의 크기
//hex는 변환된 16진수 배열
unsigned int ascii_to_hex(const char* str, size_t size, uint8_t* hex)
{
unsigned int i, h, high, low;
for (h = 0, i = 0; i < size; i += 2, ++h) {
//9보다 큰 경우 : 알파벳 문자 'A' 이상인 문자로, 'A'를 빼고 10을 더함.
//9이하인 경우 : 숫자 입력으로 '0'을 빼면 실제 값이 구해짐.
high = (str[i] > '9') ? str[i] - 'A' + 10 : str[i] - '0';
low = (str[i + 1] > '9') ? str[i + 1] - 'A' + 10 : str[i + 1] - '0';
//high 4비트, low 4비트이므로, 1바이트를 만들어주기 위해 high를 왼쪽으로 4비트 shift
//이후 OR(|)연산으로 합
hex[h] = (high << 4) | low;
}
return h;
}
int main() {
char str[128] = "CAFEcafe0102";
uint8_t hex[128] = { 0, };
size_t size = strlen(str);
int i;
//소문자 cafe를 대문자로 만들기 위해 strupr함수 사용
strupr(str);
//hex에 실제 16진수의 값이 들어감
ascii_to_hex(str, size, hex);
//size는 반으로 줄어듦, ex) hex[0]=0xCA;
for (i = 0; i < (size/2); i++)
printf("0x%02X\n", hex[i]);
}
댓글남기기