10주차 강의 정리(한성태) - aksrud/3kingOfGod GitHub Wiki
문자와 문자열
- 문자 인코딩
- 'A' - 65 이런식으로 문자를 컴퓨터가 이해 할 수 있는 숫자로 변환해주는 것이다.
문자 집합
ASCII(미국 정보 교환 표준 부호) 아스키는 영문자, 숫자, 기호, 제어문자 등등을 포함한 문자들을 0 ~ 127까지의 수로 매핑 되어있는 표로 8비트 중 7비트가 쓰인다. (7비트 표현 가능 0을 포함한 양수 == 0 ~ 127) 그래서 여기서 문자의 크기를 물어본다면 1byte즉 1bit라 할 수 있다.
나머지 1비트는 패리티 비트로 시리얼 통신(하나 하나씩 보냄)에서 오류를 검출할 때 쓰인다. 홀수, 짝수 패리티 : 전체 비트의 1의 갯수가 홀수 또는 짝수에 맞춰서 정함. ex.) 'A' == 0(패리티 비트) 100 0001(실제 데이터)
아스키는 인코딩 방식이 하나로 ascii에 있는 맵핑이 되어있는 그대로 인코딩이 된다.
UNICODE(전세계 표준 문자 집합) 유니코드는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이다. 유니코드는 아스키와 호환성을 위해 아스키가 사용하는 0~127까지는 동일하게 되어있으며 그 후 부터 추가가 되어 있다. 유니코드는 특별하게 한글 조합을 이용할수 있는데 방법은 유니코드값 = 44032 + 초성번호 * 21 * 28 + 중성번호 * 28 + 종성번호 으로 이것으로 한글을 조합하거나 분해 할 수가 있다. (초성과 중성이 둘다 28이 곱해져 있는 것은 분해 때문) 유니코드 인코딩 방식
UTF-8 : 가변 길이 인코딩 방식으로 1~4 바이트로 맵핑되며 웹에서 기본적으로 널리 사용되는 인코딩 방식이며 한글은 3바이트로 인코딩된다. UTF-16 : 가변 길이 인코딩 방식으로 2,4바이트로 맵핑되며 window나 대부분의 프로그래밍 언어에서 쓰이며 대부분 한글을 포함해 2바이트로 표현된다 그 이외는 4바이트. UTF-32 : 4바이트로 고정된 인코딩 방식으로 단순하게 모든 문자를 4바이트로 유니코드에 있는 것을 그대로 인코딩 한다. UTF-8 인코딩 방식 UTF-16 인코딩 방식
문자열과 문자열의 차이
""로 감싸져 있으면 문자열 취급이다. ''로 감싸져 있으면 문자 취급이다
문자열 리터럴
문자열 리터럴이란 프로그램 소스 안에서 ""에 묶인 문자열 상수이다. 이 때문에 C++에선 상수 문자 포인터로 저장하지만 c는 그냥 문자 포인터로 저장한다. 하지만 리터럴은 메모리 구조로 보면 데이터 영역에 읽기 전용 데이터 영역(rodata) readonly로 들어가 값은 변경을 못 한다.
문자열을 저장하는 방법
-
포인터 (자료형이 char*인 방식으로 포인터를 생성하여 문자열의 주소를 저장한다.)
-
배열 : 배열은 길이를 미리 정해줘야 하기 때문에 문자열의 길이를 추정해야 되는데 c언어에선 문자열의 길이가 +1 이므로 문자열의 길이가 n이면 char arr[n+1] = ""(실제 코드는 초기화를 상수로 함 예시일 뿐) 이런 식으로 저장한다.