893 words
4 minutes
240330_ASICII_basic001

왜 ASCII에서 소문자는 대문자 바로 뒤에 오지 않을까?#

  • ASCII에서 Z90, a97에 배치되어 있으며, 그 사이 6개 문자 덕분에 대문자와 소문자의 코드 차이가 32로 맞춰짐
  • 322^5라서 A 65a 97처럼 대응하는 대소문자는 항상 00100000 비트 하나만 다름
  • 이 배치 덕분에 32의 비트 반전값과 AND하면 대문자화, 32OR하면 소문자화, 32XOR하면 대소문자 반전이 가능함
  • 알파벳 순번은 문자 코드에 31AND해 하위 5비트만 남기면 얻을 수 있으며, A/a는 1, Z/z는 26이 됨
  • ASCII는 7비트로 128개 코드 포인트…

ASCII#

ACKAcknowledgeEOTEnd of TransmissionPNPunch On
BELBellESCEscapeRESRestore
BSBackspaceETBEnd of Transmission BlockRSReader Stop
BYPBypassETXEnd of TextSIShift In
CANCancelFFFrom FeedSMSet Mode
CCCursor ControlFSField SeparatorSMMStart of Manual Message
CRCarriage ReturnHTHorizontal TabSOShift Out
CU1Customer Use 1IFSInterchange File SeparatorSOHStart of Heading
CU2Customer Use 2IGSInterchange Group SeparatorSOSStart of Significance
DC1Device Control1IRSInterchange Record SeparatorSTXStart of Text
DC2Device Control2IUSInterchange Unit SeparatorSUBSubstitute
DC4Device Control4LCLower CaseSYNSynchronous
DELDeleteLFLine FeedTMTape Mark
DLEData Link EscapeNAKNagative AcknowledgeUCUpper Case
DSDigital SelectNLNew LineVTVertical Tab
EMEnd of MediumNULNull¢Cent Sign
ENQEnquirePFPunch off¬Logical NOT

다시 정리#

  • 이 표는 **ASCII 제어 문자(Control Characters)**와 일부 확장 문자 및 장치 제어 코드의 약어를 정리한 것입니다. 초기 컴퓨터와 텔레타이프(Teletype), 프린터, 자기테이프 등의 장치를 제어하기 위해 사용되었습니다.

  • 아래는 주요 항목을 기능별로 묶어서 설명한 것입니다.

분류코드의미용도
전송 시작/끝SOHStart of Heading헤더 시작
STXStart of Text본문 시작
ETXEnd of Text본문 끝
EOTEnd of Transmission전송 종료
ETBEnd of Transmission Block블록 종료
응답ACKAcknowledge정상 수신
NAKNegative Acknowledge오류 발생, 재전송 요청
ENQEnquiry상대 상태 확인
화면/입력BSBackspace한 칸 뒤로
HTHorizontal Tab
LFLine Feed다음 줄
CRCarriage Return줄 처음으로
VTVertical Tab세로 탭
FFForm Feed다음 페이지
ESCEscape특수 명령 시작
장치 제어DC1~DC4Device Control장치 제어용
DLEData Link Escape데이터 링크 제어
문자 집합SIShift In기본 문자 집합
SOShift Out다른 문자 집합
구분자FSField Separator필드 구분
GS(IGS)Group Separator그룹 구분
RS(IRS)Record Separator레코드 구분
US(IUS)Unit Separator단위 구분
기타BELBell벨(삑 소리)
DELDelete삭제
NULNull값 없음
CANCancel취소
SUBSubstitute대체 문자
SYNSynchronous Idle동기 통신

표에 있는 특수 코드들#

  • 다음 항목들은 표준 ASCII에는 포함되지 않거나 특정 장비에서만 사용된 코드입니다.
코드의미
BYPBypass
CCCursor Control
CU1, CU2Customer Use 1, 2
DSDigital Select
LCLower Case
UCUpper Case
PFPunch Off
PNPunch On
RESRestore
SMSet Mode
SMMStart of Manual Message
TMTape Mark
  • 이들은 IBM 메인프레임, 텔레타이프, 천공 카드(punch card), 자기테이프 장치 등에서 사용되던 제조사별 확장 제어 코드입니다.

  • 지금도 자주 쓰이는 것

  • 오늘날 일반적인 운영체제와 터미널에서 자주 볼 수 있는 것은 다음 정도입니다.

    • \r → CR (Carriage Return)
    • \t → HT (Horizontal Tab)
    • \b → BS (Backspace)
    • \0 → NUL
    • \a → BEL (터미널 벨)
    • 0x1B → ESC (ANSI 이스케이프 시퀀스의 시작)
    • 0x7F → DEL
  • 예를 들어 터미널에서 글자 색을 바꾸는 ANSI 시퀀스는 ESC 문자로 시작합니다.

ESC [31mHello ESC [0m
  • 여기서 ESC는 ASCII 값 27(0x1B) 입니다.

  • 참고로, 질문에 나온 표는 **ASCII 제어 문자(ANSI X3.4)**뿐만 아니라 EBCDIC 및 IBM 장비의 제어 코드까지 함께 실어 놓은 표입니다. 그래서 PN, PF, DS, TM, LC, UC처럼 순수 ASCII에는 없는 항목들도 포함되어 있습니다.

BEL (0x07) asks the terminal to beep/flash#

fputs("Build finished\a\n", stdout);
// BEL (0x07) asks the terminal to beep/flash
fflush(stdout);
240330_ASICII_basic001
https://younghakim7.github.io/blog/posts/240330_asicii_basic001/
Author
YoungHa
Published at
2024-03-30