텍스트 처리에 적합한 툴 소개 부탁드립니다.
글쓴이: freezm7 / 작성시간: 월, 2004/08/30 - 12:01오후
.c 파일에 바이너리 파일을 넣을 때,
const unsigned char image[] = { 0xf3, 0x2d, ... }
의 c 파일을 만들기 위해, 지금은 파일 -> c 코드로 변환하는 xxd 같은 프로그램을 이용하고 있습니다.
그런데 이 방식이 바이너리 파일이 자꾸 바뀔 경우엔 상당히 불편합니다.
그래서, C 전처리기와 비슷한 프로그램(내지 스크립트)를 만들어 보려고 합니다.
const unsigned char image[] = { #HEX a.c } == 위와 같은 파일을 프로그램으로 돌려서 const unsigned char image[] = { 0xfe, 0x2d, ... }
예전에 이런 프로그램이 있는지 질문을 올렸었는데,
아쉽게도 찾지 못했습니다.
그래서 제가 만들어 보려고 하는데, 세가지 정도 방법이 떠오르더군요.
(1) c 로 직접 작성한다.
(2) 텍스트 처리 전용 언어 (펄 등...) 을 사용한다.
(3) lex & yacc
이 중에서 현실적으로 제가 할 줄 아는 방법은 1번 밖에 없습니다.
하지만, 가능하다면 2번이나 3번 방법이 더 쉬울 것 같거든요.
2번 방법은 #HEX 등의 키워드를 찾기는 쉬울 것 같은데,
정작 인클루드(헥스 형식으로) 해야 할 파일을 처리하진 못할 것 같습니다.
3번 방법은 전혀 제가 모르는 쪽이구요. :cry:
2, 3번 쪽으로 잘 아시는 분의 가능성에 대한 조언 부탁드립니다.
만들어지면 물론 소스 공개하겠습니다. :D
Forums:
m4를 쓰세요.일단, 소스 파일(tmp.c.m4)은 다음과 같이
m4를 쓰세요.
일단, 소스 파일(tmp.c.m4)은 다음과 같이 만들고..
다음과 같이 hexdump.m4를 만듭니다.
그리고 다음 명령을 수행해서 원하는 tmp.c를 얻습니다.
$ m4 -P tmp.c.m4 > tmp.c
출력 결과는:
일일히 m4를 실행하는 건 귀찮으니, Makefile에 넣어 두는게 좋겠죠..
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
[code:1]#include <stdio.h>#inc
bin2c image1.jpg image1.c image1 이라고 치면
이런 소스코드가 image1.c란 파일 이름으로 생성됩니다.
그럼 필요한 곳에다가
라고 쓰면 간단하지요. #include는 반드시 헤더파일에만 사용 가능한 것은 아닙니다. 단순한 '포함'일 뿐이기 때문에 소스 코드던 주석이던 뭐든지 가능합니다.
이런 것도 가능합니다.
ps. 가독성 면에서는 다음과 같이 하는 편이 낫겠군요.
cinsk 님의 m4 를 이용한 방법이 제가 찾던 것이네요. 감사합니다.
cinsk 님의 m4 를 이용한 방법이 제가 찾던 것이네요. 감사합니다.
여담이지만, lsj0713 님의
는 xxd 와 쉘변수를 이용해서 다음과 같이 구현할 수도 있겠네요.
즐겁게 살아 볼까나~*
댓글 달기