프로그래밍/C언어

아스키 코드와 문자표(ASCII Code Table)

LeePorter 2024. 9. 20. 17:58

예전에 영화 마션에서 맷 데이먼이 혼자 화성에 남겨져 있을 때 1997년에 NASA에서 버린 탐사선 패스파인더를 통해 외부와 통신을 할 수 있게 되자 처음으로 시도한 것이 화이트보드에 질문을 적고 Yes or No를 해당 장치의 카메라가 바라보게 해서 답을 할 수 있게 하는 굉장히 기초적인 양방향 통신을 합니다.

 

하지만 이후에 고민에 빠지게 됩니다. 이런 식의 통신의 답은 항상 Yes or No 입니다. 즉, 상호 대화라기 보다는 질문&답변 식이 될 수 밖에 없죠. 그렇다고 알파벳 26자를 카메라 360도 반경 안에 균등하게 꽂는 것도 힘들죠. 질문지도 꽂아야하고 그러면 한칸당 13도 내로 다닥다닥 붙여야해서 너무 비효율적이죠.

 

그래서 생각한 것이 동료의 소지품중에서 아스키 코드표를 찾아 16진법으로 통신을 하기로 합니다. 16진법은 0 ~ 9의 십진수 10개와 10 ~ 15의 숫자에 해당하는 문자 A부터 F까지로 구성된 총 16개의 숫자 표현법입니다.

영화 마션에서 16진수를 이용하여 지구와 통신하는 모습

 

16진법은 단순히 숫자를 떠나서 프로그래머들이 사용하기 적합한 데이터 통신용 수단입니다.

 

컴퓨터에서는 2진법(0과 1, =1Bit)이 가장 익숙한 수체계입니다. 흔히 ON/OFF를 이야기 하죠. 그리고 우리가 컴퓨터를 사용할 때 가장 많이 이야기하는 단위가 Byte(바이트)입니다. Byte는 8개의 bit를 묶어 표현한 것으로, 컴퓨터의 저장 단위입니다. 1Byte는 1Character(캐릭터)라고도 불리웁니다. 이유는 아래에서 설명하겠습니다.

 

bit는 Binary digit의 약자로, 데이터(자료)들을 나타내는 최소 단위로, 컴퓨터 용량, 프로그램 처리 능력의 최소 단위로 사용합니다. 1bit는 디지털 값으로 표현되어 0과 1로 표현됩니다. 즉, 2가지의 값을 가지므로 2진법으로 컴퓨터가 가장 익숙하게 사용하는 단위가 됩니다.

 

정리하면, 1bit는 2진법으로 표현하고, 이런 bit가 8개 모이면 1Byte(=8bit)가 됩니다. 그리고 8bit는 결국 2진수 8자리로 표시하므로(0000 0000) 경우의 수는 2의 8승, 즉 256가지의 상태값을 나타냅니다. 여기서 2진법으로 숫자든 문자든 표현하려면 10100011 이런식으로 적어야하는데 이건 컴퓨터, 즉 기계는 이해하기 쉽지만 인간은 이해하기 어렵습니다.

 

16진법, 즉 16개의 숫자와 문자로 1자릿수를 표현하는데, 이는 2진법 4자리를 1자리로 표현할 수 있습니다. 다르게 말하면 1Byte(8bit, 2진수 8자리)를 표현할 때 2자릿수로 표현할 수 있어 눈으로 보기에도 편하고, 컴퓨터도 2진수로 변환하면 바로 이해할 수 있어서 인간과 컴퓨터가 소통하기에 최적화된 진법이 되겠습니다.

메모리에 저장된 데이터를 출력할 때 16진수로 표현하니 깔끔하게 정렬되어 보인다.

16진법 두 자리수로 표현할 수 있는 경우의 수는 256가지입니다. 즉, 00부터 FF까지 나타내게 됩니다. 각각의 값에 의미를 부여한 것이 ASCII(American Standard Code for Information Interchange, 이하 아스키) 코드입니다.

 

아스키 코드는 미국에서 정보교환용 표준 부호로 7비트 형태로 만든 부호체계입니다. 그래서 초기에는 0x00부터 0x7F까지 총 128개의 문자가 사용되었습니다. 그리고 앞에 에러검출을 위해 1bit (Parity bit라고 부름) 붙여서 총 8bit로 아스키 코드를 표현합니다.

 

0x는 16진수를 표기할 때 사용하는 접두사입니다. 마찬가지로 8진수(OCT)의 경우 0을 붙여 표기합니다.

ex) 십진수 110을 각각 16진수와 8진수, 2진수 표기

 

16진수 : 0x6E
8진수 : 0156
2진수 : 0110 1110⑵

 

8bit는 1Byte로 표현한다고 위에서 말씀드렸고, 이는 1Character라고도 표현한다고 했는데 이유는 위에서 정의한 아스키 코드가 하나의 문자를 표현하기 때문이고, 하나의 문자를 컴퓨터에서 표현하기 위해서는 1Byte의 아스키 코드를 사용하므로 1Character=1Byte(=8bit)라는 단위가 만들어진 것입니다.

아스키 코드표


위에 이미지는 제가 엑셀을 통해서 만든 아스키 코드표입니다. 자주 사용하는 영문자(대/소문자)와 숫자는 따로 배경색을 칠해놓았습니다.

 

🔹숫자(0 ~ 9) : 48 ~ 57

🔹영문자(대문자) : 65 ~ 90

🔹영문자(소문자) : 97 ~ 122

 

영문자의 대소문자의 10진수 차이는 32입니다. 그래서 영문자의 대소문자 변환시 32를 더하거나 빼주면 됩니다.

 

이번 글에서는 아스키코드에 대해서 전반적인 내용과 함께 제가 작성한 아스키 코드표를 보여드렸습니다.

아스키코드표.xlsx
0.01MB

 

위의 파일은 아스키 코드표가 들어있는 엑셀 파일입니다. 필요하신 분들은 사진을 퍼가셔도 좋고, 파일을 직접 받아가셔도 됩니다. 감사합니다.