리눅스 명령어 중에 jp2a가 있습니다. 이미지 파일을 터미널에서 볼 수 있는 아스키로 변환해서 보여주는 기능입니다.
프로그램의 로고도 이렇게 아스키로 변환해서 보여줍니다.
이걸 간략하게 구현해보는 프로젝트입니다.
프로젝트 자체는 재미를 위한 것인데, 임베디드라고 해서 아주 관련이 없는 것은 아닙니다.
보통 프로젝트에서는 구조체로 정의한 파일 포맷이 있고, 이러한 포맷에 따라 바이너리로 파일을 저장하거나 불러오는 일이 필요합니다. 간단하게는 JSON도 사용하지만, 효율을 생각하면 바이너리로 저장하죠.
아주 보편적인 예는 아니겠지만,
<생각하는 프로그래밍>에도 소개된 예입니다.
전화번호
031-234-1234를 JSON으로 저장한다면 -를 빼더라도 10바이트가 필요합니다.
0312341234를 int로 저장하면 4바이트면 됩니다.
6바이트를 절약할 수 있고, 문자열 대신 숫자 타입 하나로 다루면 되므로 처리 속도도 매우 빠릅니다. 1억 개의 데이터를 저장한다면 4억 바이트와 10억 바이트 저장의 속도 차이도 발생하죠.(400메가 저장과 1기가 저장의 차이)
여기에 더해 요즘은 압축해서 저장합니다. Unit 82는 아카이브 저장을 다루고, 여기에 압축을 더하면 요즘 많이 쓰는 파일 저장 방식이 됩니다. 블리자드 게임은 MPQ나 CASC 포맷을 사용하고 있고, 많은 게임 회사들이 아카이브 포맷을 사용합니다. 4000개의 데이터 파일이 따로 있으면 로딩 속도가 매우 느린데, 하나의 아카이브 파일 내부에 4000개의 데이터를 읽는 게 더 빠르기 때문입니다.(윈도우 탐색기에서 파일을 복사할 때 소스 코드 파일처럼 용량은 크지 않으나 개수가 많으면 복사하는 데 더 오랜 시간이 걸립니다. 용량이 큰 파일의 복사가 더 빠르지요)