[C++] 아스키(ASCII) 코드

2024. 3. 14. 12:52Programming Language/C++

문자형(char, wchar_t 등)에 정수값을 넣으면 문자를 표현하는 자료형이기 때문에 정숫값과 그 정수에 대응하는 문자까지 저장한다.

여기서 문자는 아스키(ASCII) 코드값을 뜻한다.

아스키(ASCII) 코드

• 영문 알파벳을 사용하는 대표적인 문자 인코딩이다.

C/C++는 아스키 코드를 이용하여 문자를 인코딩한다.

 

인코딩(Encoding)

• 입력한 문자를 컴퓨터가 이용 가능한 신호로 만드는 것

쉽게 말해서 우리가 사용하는 문자나 기호를 컴퓨터가 읽을 수 있는 2진수로 변환하는 것이다.

int main()
{
	// 크기가 1byte인 자료형
	int i = 1;  // 1
	bool b = 1;  // true
	char c = 1;  // 1 '\x1'
    
    // 크기가 2byte인 자료형
    short s = 49;  // 49
    wchar_t wc = 49;  // 49 '1'
    
    return 0;
}

변숫값 (int, bool, char, short, wchar_t)

아스키 코드 표(ASCII Code Table)

정숫값이 어떤 문자에 해당하는지를 나타낸 표

아스키코드 표
출처 : https://i5i5.tistory.com/1036

▷ 예시

아스키 코드 (49, 65)

아스키 코드 표에 나와있는 것처럼 숫자 49는 문자 1, 숫자 65는 문자 A가 저장된다.

다중 바이트 인코딩 vs. 와이드 문자 인코딩

1) 다중 바이트 인코딩 (EUC-KR, UTF-8 등)

• 문자열은 다중 바이트 인코딩 형식으로 저장된다.

• 1바이트로 표현할 수 없는 한글 문자를 다루기 위해 2바이트 이상을 사용하는 방식이다.

• 한글 문자는 2바이트 이상으로 저장되고, 음수 바이트 값으로 저장된다.

char cArr[10] = "abc한글";

`-57 '?'`, `-47 '?'` = 한

`-79 '?'`, `-37 '?'` = 글

이 음수 값들은 EUC-KR 인코딩에서 멀티 바이트 문자를 저장할 때 표현되는 값이다.

 

2) 와이드 문자 인코딩

• 문자열은 와이드 문자 형식(UTF-16)으로 저장되며, 모든 문자는 2바이트씩 저장된다.
• 한글 문자는 양수 정수 값으로 저장된다.

wchar_t wChar[10] = L"abc한글";

`54620 '한'` = 한

`44544 '글'` = 글


0 vs. SP(space, 공백) vs. '0'

0에 대응되는 문자 = NUL (아무것도 없는 상태)

문자열 맨 뒤에 숫자 0은 문자의 끝을 의미한다.

즉, 마침표 역할을 한다고 생각하면 된다.

아스키코드 표 (0)

NUL은 NULL의 준말이다.

 

 SP(Space, 공백)에 대응되는 숫자 = 32

아스키코드 표 (SP)

공백(SP)은 <Spacebar>를 누르면 생기는 공백을 말한다.

 

 '0'에 대응되는 숫자 = 48

아스키코드 표 ('0')

 

▷ `"4 59"`

&quot;4 59&quot; 메모리

52 32 53 57 0

4와 5 사이의 공백 자리에 숫자 32가 저장된다.


아스키 코드 표에서 숫자가 0~127까지 있는 이유

1byte는 0~255까지 표현할 수 있지만 메모리를 온전히 다 사용할 수는 없다.

오류 검출을 위한 패리티 비트1bit 존재하므로 실제로는 7bit만 사용할 수 있고, 표현할 수 있는 값은 0~127이다.

• 패리티 비트(parity bit)
정보 전송 과정에서 오류를 검출하기 위해 추가되며, 1bit 오류를 찾아낼 수 있는 비트이다.
오류 체크만 하고 고쳐주지는 않는다.
고쳐주는 코드는 해밍코드이다.

• 해밍 코드(hamming code)
패리티 비트를 이용하여 오류를 검출하고 교정한다.

아스키코드 표 (0~127)