아 c에서 기억이 너무 안나서 여쭈어봅니다..
글쓴이: victoryz12 / 작성시간: 토, 2010/09/11 - 2:34오전
char 0x41 ........ ...**... ...**... ...**... ...**... ..*..*.. ..*..*.. ..*..*.. ..*..*.. .******. .*....*. .*....*. .*....*. ***..*** ........ ........
hankaku.txt 에서의 코드 이구요~
소스 프로그램에서 이 텍스트 파일의 데이터를 쓸때
extern char hankaku[4096];
hankaku + 0x41*16;
이런식으로 사용하네요~ 무슨 의미인지 잘 모르겠네요;;ㅠ
텍스트 파일 코드부분 설명 부탁드립니다;;ㅜ
감사합니다.
Forums:
신기하네요.
이 코드 돌아가나요? 흠.. 전 안돌아가는데..
아아~
텍스트 파일 상에서의 코드네요;;
hankaku.txt 에서의 코드 파일이구요~
소스 프로그램에서 이 텍스트 파일의 데이터를 쓸때
extern char hankaku[4096];
hankaku + 0x41*16; 이런식으로 사용하네요~ 무슨 의미인지 잘 모르겠네요;;ㅠ
말씀하시는 의미를 잘모르겠습니다.
hankaku 포인터에서 0x41*16 만큼 뒤로 이동한 주소를 달라는건데, 이 의미를 물어보신건지요.
전 저 그림이 코드인줄 알았네요. 신기해 했는데.. ;;
그러면요~
0x41 이게 주소 표현인가요? 주소표현을 char 0x41로 1바이트로 표현할수 있는것인가요??
0x41 은
0x41 은 16진수입니다.
는
과 동일합니다.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
...
어떻게 표현해 드릴지 난감하네요. 0x41 은 그냥 숫자입니다. 다만 16진수로 표현했을 뿐이죠.
막상 검색해서 c spec 에서 내용을 찾아보려 하니 잘 못찾겠네요. Lexical Rules에 digit에 대한 정의가 0|1|...|9| 로만 되어 있는데, 왜 그냥 책에 있는걸 그냥 믿었는지 제 자신을 의심하고 있습니다. ;;
ref ) C-- Language Specification
책을 보시라고 할수 밖에 없네요. 예를들어 그냥
하면 그냥 10이 출력됩니다.
전후 소스를 참조할수 없는 관계로 그 구문이 어떤 의미를 담는지 정확히 모르겠네요. 저건 그냥 숫자입니다. 그냥 포인터 연산에 불과하구요. 수고하세요.
참고하시라고 몇가지
참고하시라고 몇가지 적으면
- 0x41은 10진수로 65이며, ASCII 코드 혹은 UTF-8 환경에서 대문자 A를 나타냅니다.
- 16을 곱한 것으로 보아서, 하나의 문자를 나타내는데 16byte를 사용한다고 추측할 수 있습니다.
- 올려주신 텍스트의 형태를 보면 8 x 16 형태로 대문자 A를 그리고 있습니다. 하나의 . 혹은 * 을 1비트라고 가정하면, 둘째줄 부터의 전체 내용은 16byte입니다.
즉, hankaku 배열은 ASCII 문자 256가지의 생김새를 bit값으로 저장하고 있는 것으로 추측됩니다. 대문자 A의 모양은 hankaku 배열의 [0x41 * 16] 에서부터 16byte의 공간에 저장될 겁니다.
옛날 생각
옛날 생각 나네요.
어렸을 적에 에뮬레이터 게임 롬을 해킹/패치해 본 경험이 있는데, 흔히 말하는 한글화라는 과정에서 많이 볼 수 있는 패턴이네요.
planetarium 님 말씀처럼 8 x 16 폰트를 배열에 넣고 그 폰트를 가져오는 코드입니다.
16 바이트에 폰트의 그래픽 데이터를 넣고, 그 그래픽 데이터를 가리키는 문자코드(여기서는 0x41, ascii 코드가 되겠네요.)들의 조합으로 게임에서 쓰이는 대사를 만들어 내죠.
그래서 폰트의 그래픽 데이터 영역을 수정하고, 문자코드로 이뤄진 대사들의 코드를 재배치해서 다른 대사를 만들어 내는 식으로 패치를 만들어 냈었습니다.
댓글 달기