아스키코드(ASCII, American Standard Code for Information Interchange)는 컴퓨터와 통신 장치에서 텍스트를 표현하기 위해 사용되는 문자 인코딩 표준입니다. 아스키코드는 미국 정보교환 표준 코드로, 영어 알파벳, 숫자, 기호, 제어 문자 등을 표현하는데 사용됩니다.
주요 특징
- 7비트 문자 인코딩:
아스키코드는 원래 7비트로 구성되어 있어 128개의 문자와 기호를 표현할 수 있습니다. 각 문자는 0부터 127까지의 고유한 정수 값에 대응됩니다. 이를 통해 다양한 문자와 제어 코드를 정의할 수 있습니다. - 확장 아스키코드:
7비트 아스키코드 외에도, 8비트를 사용하는 확장 아스키코드(Extended ASCII)가 존재합니다. 8비트 아스키코드는 256개의 문자를 표현할 수 있습니다.
아스키코드의 구성
아스키코드는 크게 제어 문자, 인쇄 가능한 문자, 숫자, 대문자 및 소문자 알파벳으로 구성됩니다.
- 제어 문자 (0–31, 127):
화면에 출력되지 않는 특수한 기능을 수행하는 문자들입니다. 예를 들어, 줄 바꿈 (LF, 10), 탭 (TAB, 9), 백스페이스 (BS, 8) 등이 있습니다. 127은 DEL 키로, 삭제를 의미합니다. - 공백과 인쇄 가능한 문자 (32–126):
- 공백: 공백 문자는 32번(0x20)입니다.
- 숫자: '0'에서 '9'까지의 숫자는 48에서 57까지의 값에 해당합니다.
- 대문자: 'A'에서 'Z'까지의 대문자는 65에서 90까지의 값에 해당합니다.
- 소문자: 'a'에서 'z'까지의 소문자는 97에서 122까지의 값에 해당합니다.
- 기타 기호: 문장 부호, 연산자 및 기타 기호가 33에서 47, 58에서 64, 91에서 96, 123에서 126까지의 값에 해당합니다.
예시
- 'A'의 아스키코드 값은 65입니다.
- 'a'의 아스키코드 값은 97입니다.
- '0'의 아스키코드 값은 48입니다.
역사와 중요성
아스키코드는 1960년대에 미국의 표준 기관인 ANSI와 ISO에 의해 개발되었습니다. 그 당시 다양한 컴퓨터 시스템 간에 문자 데이터를 교환하는 표준이 없었기 때문에, 아스키코드가 도입되어 정보 교환의 표준으로 널리 사용되었습니다. 비록 아스키코드는 영어 기반의 제한된 문자 세트만을 제공하지만, 다른 많은 인코딩 체계의 기초가 되었으며, 특히 초기 인터넷과 컴퓨터 시스템에서 중요한 역할을 했습니다.
현대에서의 사용
오늘날에는 유니코드와 같은 더 넓은 범위의 문자 인코딩이 널리 사용되지만, 아스키코드는 여전히 파일 형식, 네트워크 프로토콜, 프로그래밍 언어 등 다양한 분야에서 기본적으로 사용되고 있습니다. 유니코드의 첫 번째 128문자는 아스키코드와 동일하므로, 아스키코드 기반 시스템과의 호환성을 유지할 수 있습니다.
[프로그래머스 - 특정한 문자를 대문자로 바꾸기]
ASCII 코드에서 대문자와 소문자의 관계
ASCII 코드에서 영문 대문자와 소문자는 다음과 같은 범위를 가집니다:
- 대문자: 'A' ~ 'Z' -> ASCII 값 65 ~ 90
- 소문자: 'a' ~ 'z' -> ASCII 값 97 ~ 122
대문자와 소문자의 ASCII 값 차이는 항상 32입니다. 즉, 같은 알파벳의 대문자와 소문자는 다음과 같은 관계가 있습니다:
- 'A' (65) 와 'a' (97) 의 차이는 32
- 'B' (66) 와 'b' (98) 의 차이는 32
- 'C' (67) 와 'c' (99) 의 차이는 32
- ...
이 차이를 이용하여 소문자를 대문자로 변환할 수 있습니다. 소문자의 ASCII 값에서 32를 빼면 해당 대문자의 ASCII 값이 됩니다.
원리 설명
C++에서 소문자를 대문자로 변환하는 알고리즘은 다음과 같은 원리로 동작합니다:
- 소문자의 ASCII 값에서 32를 뺀다: 이 연산을 통해 해당 소문자와 대문자의 ASCII 값 차이만큼 빼서 대문자의 ASCII 값을 얻습니다.
- 대문자로 변환: 이렇게 얻은 대문자의 ASCII 값을 문자로 변환하여 대문자를 얻습니다.
예시코드
#include <iostream>
#include <string>
int main() {
std::string str = "hello world";
for (char& c : str) {
if (c >= 'a' && c <= 'z') {
c = c - 32; // 대문자로 변환
}
}
std::cout << str << std::endl; // 출력: HELLO WORLD
return 0;
}
위 코드에서, str 문자열의 각 문자에 대해 다음을 수행합니다:
- 문자가 소문자인지 확인 (c >= 'a' && c <= 'z').
- 소문자라면, 해당 문자의 ASCII 값에서 32를 빼서 대문자로 변환 (c = c - 32).
주의사항
- 이 방법은 ASCII에 기반한 문자 코드 체계에서만 유효합니다. 비록 대부분의 현대 시스템에서 ASCII나 이를 확장한 코드 체계를 사용하고 있지만, 유니코드 등 다른 인코딩에서는 다른 변환 방식을 사용할 수 있습니다.
- 직접 ASCII 값을 이용하여 문자를 변환하는 방식보다는, 표준 라이브러리의 함수를 사용하는 것이 더 일반적이고 권장됩니다. 예를 들어, std::toupper 함수를 사용하면 동일한 결과를 얻을 수 있습니다.
'C++ 공부' 카테고리의 다른 글
[C++]while 조건문에 '>>' 가 있는 경우는? (0) | 2024.07.28 |
---|---|
[C++]String 의 find 함수 정의, string::npos 란?(프로그래머스-문자열 바꿔서 찾기) (0) | 2024.07.28 |
[C++]String 의 replace(), regex_replace() 함수 정의, 비교 (0) | 2024.07.27 |
[C++]Sort 함수란? 정렬, 오름차순, 내림차순 (0) | 2024.07.27 |
[C++]Vector 와 Array 비교 (0) | 2024.07.27 |
댓글