[프로그래밍 이론] 아스키(ASCII) 코드란 무엇인가?

2024. 10. 12. 22:24·프로그래밍/C++
어두운 배경이 싫으시다면 페이지 우측 하단에 보이는 초승달 모양의 아이콘을 클릭하면 화이트모드로 변경됩니다.
초승달 모양 버튼 : `화이트/다크 모드` 전환
테마모드 변경 가이드

 

프로그래밍을 하다 보면 아스키코드에 대해서 다들 한 번 들어보거나, 아스키코드를 이용한 대소문자 변환 등 프로그래머라면 거의 사칙연산급의 지식이라고 할 수 있습니다. 이 부분에 대해서 좀 더 다양한 내용으로 설명을 해보겠습니다.


1. 아스키 코드란?

ASCII(American Standard Code for Information Interchange)의 약자로 컴퓨터와 통신 장비 간의 데이터 전송을 위해 개발된 문자 인코딩 시스템입니다. 아스키코드는 주로 문자(영어 알파벳)와 기호, 숫자, 구두점 및 제어 문자를 포함하여 총 128개(7비트)의 문자 집합을 정의합니다.

 

그렇다면 아스키코드가 나오기 전의 어떤 방식으로 통신을 하였는지를 보면 굉장히 기계적인 방식이 주를 이룹니다. 즉, 초기 컴퓨터 또는 그 이전의 타자기, 전신 등의 기계식 장치에서의 통신은 주로 On/Off와 같은 2진법 기반이 주를 이룹니다. 대표적인 것이 모스 부호가 있습니다.

 

다만 이런 2진법 체계의 문자 인코딩 방식은 기계 친화적이어서 인간이 이해하기가 너무 어렵습니다. 그렇다 보니 오류가 많이 발생할 수 있었고, 이를 해결하기 위해서 미국 표준 협회(ASA, 현재 ANSI)에 의해서 1960년대에 처음 도입됩니다. 

 

영화 '마션'을 보면 이것을 대표하는 장면들이 있습니다. 주인공이 지구와 첫 통신을 할 때에는 질문 → Yes or No로 답하는 부분이 있는데 시간도 오래 걸리고 답답해하는 모습을 보입니다.

 

이후 같이 갔던 동료의 아스키코드표를 참고하여 16진법을 통해 양방향 대화를 하게 됩니다. 즉, 양방향 통신으로 대화가 가능하게 된 것이 ASCII 코드 문자 체계가 나오게 된 배경과 유사합니다.

영화 마션의 한 장면 처음으로 지구와 통신하는 것을 기뻐하는 모습동료의 아스키코드표를 활용한 16진법으로 양방향 대화를 구현
영화 마션의 장면들


 

2. 비트(bit)와 바이트(Byte)

위에서 아스키코드는 128개, 즉 7비트의 문자 집합이라고 하였습니다. 이때 비트(bit)란, 컴퓨터가 데이터를 표현하는 가장 기본이 되는 정보의 단위입니다. 

 

비트는 전기신호가 들어가는 상태를 나타내는 켜짐(1)과 꺼짐(0)을 2진법(binary system)으로 표현합니다. 컴퓨터에게는 가장 기본이 되는 단위이지만 인간에게는 굉장히 불편한 표현 방식입니다.

 

그래서 인간이 사용하는 언어체계를 담아서 컴퓨터와 소통할 수 있는 문자 체계를 만들게 되는데 이것이 ASCII이고, 총 128개의 문자들로 구성되어 있습니다. 각각의 문자는 0부터 127까지의 숫자로 표현합니다. ex) 97 = a, 65 = A

 

숫자로 표현하기 때문에 10진법 또는 16진법으로 표현하기도 합니다. 다만 10진법의 경우 인간이 이해하기 편한 숫자 체계이지만, 컴퓨터에게는 그리 익숙하지 않은(?) 숫자체계입니다.

 

그리고 모니터와 같은 출력 장치를 통해 같은 문자라도 10진법으로 표기하게 되면 최대 3자리의 공간이 필요합니다. 반면 16진법으로 표현할 경우 딱 2 자리면 표현할 수 있고(00 ~ FF), 보기에 편하면서 10진법과 2진법 등으로 변환하기도 용이합니다. 

 

영화 마션의 한 장면으로 로버라는 장치의 메모리 코드를 수정하고 있는 장면. 16진법으로 오와 열이 딱 정렬된 모습이 편안하다.
영화 마션의 한 장면. 16진법으로 출력된 모습이 매우 깔끔하게 표현되어 있다.(편안)

 

바이트(Byte)는 이런 bit가 8개 모여서 구성된 데이터를 저장 및 표현하는 데 사용되는 단위입니다. 비트의 0과 1은 어떤 의미인지 부여하기 어렵지만, 8개의 비트가 모인 바이트는 0 ~ 255(2의 8제곱 = 256)의 숫자를 이용하여 표현하므로 의미를 부여할 수 있습니다. 위에서 97 = a라고 한 것처럼

 

이런 바이트라는 개념이 등장하게 된 주요 원인이 바로 위에서 설명한 ASCII 코드 때문입니다. ASCII 코드는 초창기에는 7비트와 1비트의 '패리티 비트(Parity bit)'를 붙여서 총 8비트로 구성되었습니다.

 

'패리티 비트'란, 에러 검출을 목적으로 사용하는 비트로 데이터 전송 시 손상 여부를 체크하기 위한 비트입니다. 초창기에는 전자기 신호가 들쭉 날쭉이고 장치가 좋지 않아 잘못된 데이터가 전송되는 상황이 많았기 때문에 주로 사용되었습니다. (물론 검출만 할 뿐 뭐가 문제인지는 모른다는 게 함정 ㅋ)

 

이런 식으로 8비트 체계로 통신을 하다 보니 이것을 하나의 단위로 묶어서 사용하기에 이르렀고, 그래서 바이트가 나오게 되었습니다. 추후에 패리티 비트가 필요 없게 되자, 확장 아스키(Extended ASCII)로 기존 아스키코드를 확장한 8비트(256개의 문자 표현)를 만들게 됩니다.

 

1Byte는 1 Character라고도 표현하기도 합니다. 이는 위에서 말했듯이 ASCII 코드(1Byte)로 하나의 문자를 표현할 수 있어 문자를 나타내는 Character를 붙여서 1Byte=1Character라 합니다.


 

3. 아스키 코드표

아마 아스키코드 또는 아스키코드표를 검색하면 아래와 같이 코드표가 대부분 검색될 겁니다. 아래 표는 제가 직접 제작한 코드표이고, 해당 표를 제작한 엑셀 파일도 같이 공유하겠습니다.

 

직접 제작한 아스키 코드표
직접 제작한 아스키 코드표. 문자와 숫자 등을 강조

 

아스키코드표.xlsx
0.01MB

 

위에 표에는 제가 문자와 숫자를 강조해서 표시해 놨습니다. 이는 프로그래밍을 하다 보면 중요한 역할을 수행하기 때문입니다. 특히 영어의 대소문자 구분을 위해서는 알아두면 좋습니다.

  • 알파벳 대문자(A ~ Z) : 65 ~ 90
  • 알파벳 소문자(a ~ z) : 97 ~ 122
  • 숫자(0 ~ 9) : 48 ~ 57

영어 알파벳의 대소문자의 차이는 32로 빼거나 더해서 대소문자를 변환하는 것도 가능합니다.

 

이상 아스키코드와 관련하여 설명하였습니다.


구독 및 좋아요는 컨텐츠를 생산하는데 많은 도움이 됩니다. 😊

감사합니다.

저작자표시 비영리 변경금지 (새창열림)
'프로그래밍/C++' 카테고리의 다른 글
  • C++ cin input 입력 버퍼 초기화하는 방법. 잘못된 입력 초기화 및 개행 문자 초기화
  • C/C++ 랜덤 난수 rand() 사용법 및 다양한 구현 방식
RightNowHJ
RightNowHJ
온갖 잡다한 IT 관련 지식 모아모아 공유하는 블로그 (옛 LeePorter 블로그 이전)
  • RightNowHJ
    잡식성 개발자의 블로그
    RightNowHJ
  • 전체
    오늘
    어제
    • 분류 전체보기 (67)
      • IT 활동 (44)
        • 티스토리 (16)
        • 소프트웨어 (13)
        • AI (15)
      • 프로그래밍 (12)
        • 언리얼엔진 (9)
        • C++ (3)
      • 일상생활 (11)
        • 이슈모아보기 (5)
        • 실생활지식 (5)
        • 재테크 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Utility
    AdSense
    구글 애드센스
    Meta Quest
    AI 이미지
    수동 광고
    sd 1.5
    웹 ui
    언리얼5
    hELLO 스킨
    셀프 등기
    블로그
    티스토리챌린지
    오블완
    광고
    부동산
    UE5
    소프트웨어
    티스토리
    언리얼 엔진
    플러그인
    stable diffusion
    Unreal Engine
    다크모드
    스테이블 디퓨전
    메타 퀘스트
    WEBUI
    유틸리티
    을사년
    부담부 증여
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
RightNowHJ
[프로그래밍 이론] 아스키(ASCII) 코드란 무엇인가?
상단으로

티스토리툴바