txt파일에 저장된 5d f2 a5 2c 06 c2 0a 등과 같은 16진수(Hexadecimal)값을 불러와 배열에 저장하고 싶다면 어떻게 해야할까?
쉽게 말해, 메모장(.txt)에 저장된 5df2a52c06c20a 문자열 값을 16진수로 변환하여 다음과 같이 배열에 저장하려고 하는 작업입니다.
unsigned char hexadeciaml[] = {0x5d, 0xf2, 0xa5, 0x2c, 0x06, 0xc2, 0x0a} .
이와 같은 자료를 찾게 된 이유는 txt에서 데이터 값을 불러올 때 5df2a52c06c20a를 16진수가 아닌 문자열로 인식하여 문제가 발생하였기 때문이고, 이를 해결하기 위해 서는 16진수로 변환하여 컴파일러에서 16진수로 인식가능하게 만들어줘야 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 |
#include<stdio.h>
#define FILELEN 15
int ascii_to_hex(char c) //ASCII 값을 HEX로 변경해주는 코드, 값의 범위를 제한함.
{
int num = (int) c;
if(num < 58 && num > 47)
{
return num - 48;
}
if(num < 103 && num > 96)
{
return num - 87;
}
return num;
}
int main()
{
FILE *fp = fopen("sample","r");
unsigned char c1,c2;
int i=0;
unsigned char sum,final_hex[FILELEN/2];
for(i=0;i<FILELEN/2;i++)
{
c1 = ascii_to_hex(fgetc(fp));
c2 = ascii_to_hex(fgetc(fp));
sum = c1<<4 | c2;
final_hex[i] = sum;
printf("%02x ",sum);
}
printf("\n");
} |
cs |
참조-http://stackoverflow.com/questions/18693841/read-contents-of-a-file-as-hex-in-c
해당 문자열의 크기 만큼 FILELEN 값을 지정하여 ascii_to_hex 함수를 이용하여 간단히 16진수로 변경가능합니다. 위 코드를 디버깅해가며 한 번 분석해보시면 복잡하지 않은 코드이므로 쉽게 이해할 수 있을것 같습니다.
위 코드에 대한 궁금증은 댓글달아주시면 답변드리겠습니다
반응형
'Research & Studies > Programming' 카테고리의 다른 글
[C언어] fopen함수-txt파일 이름을 변수로 입력받아 열기. (0) | 2016.12.30 |
---|---|
[알고리즘] a la russe 알고리즘 (곱셈 알고리즘) (0) | 2016.11.23 |
[c언어] fgets함수 개행(enter) 제거하기 (0) | 2016.11.18 |
[C언어]문자열 2개 합치기 (How to concatenate 2 strings?) (0) | 2016.11.18 |
댓글