출처 :
http://blog.naver.com/tsmwt?Redirect=Log&logNo=100187716113
http://blog.naver.com/smuoon4680?Redirect=Log&logNo=50121299018
Character Sets의 종류와 특성
1. SBCS (Single Byte Character Set) : 문자를 표현하느데 1 byte 사용
ex) 아스키코드
2. MBCS (Multi Byte Character Set) : 한글은 2 바이트, 영문은 1 바이트 사용
3. WBCS (Wide Byte Character Set) : 문자를 표현하는데 2 바이트 사용.
ex) 유니코드
=> 문자 표현을 할 때 MBCS는 일반적으로 효율성을 논하지 않는다. 메모리가 너무 커져서,
=> WBCS 방식은 훨씬 안정적이기 때문에 오히려 더 많이 쓴다.
아스키 코드 사용 소스코드 |
#include <stdio.h> #include <string.h> //strlen 함수 포함 int main(void) { char str[] = "ABC한글"; int size = sizeof(str); int len = strlen(str); printf("배열의 크기: %d \n", size); printf("문자열 길이: %d \n", len); return 0; }
실행결과
배열의 길이 : 8
문자열의 길이 : 7
=>sizeof 는 맨 뒤의 널 문자 까지 포함 하고
=>strlen 함수는 널 문자를 제외한 길이를 반환한다.
배열의 크기가 7인 이유는 ABC가 영문이니 1바이트, 한글은 2바이트 1*3 + 2*2 = 7 그리고 null 문자 1바이트 해서 8. 문자열 길이는 5가 아니라 한글 때문에 3+4 = 7 이기 때문이다.
WBCS 기반의 프로그래밍
첫째 : char 를 대신하는 wchar_t
둘째 : "ABC" 대신하는 L"ABC"
셋째 : 유니코드용 전용 함수
를 써야 한다.
유니코드 사용 소스코드 |
#include <stdio.h> #include <Windows.h> //wcslen() wprintf()함수 포함 int main() { wchar_t str[] = L"ABC"; int size = sizeof(str); int len = wcslen(str); wprintf(L"배열의 크기: %d \n", size); wprintf(L"문자열 길이 : %d \n", len); return 0; }
strlen함수와 printf 함수는 SBCS 기반 함수이므로 그냥 사용시 에러가 발생한다. WBCS기반의 함수를 써야 한다.
단, sizeof는 함수가 아니라 연산자이므로 상관 없다.
WBCS 기반 함수는 Windows.h 헤더파일 안에 선언 및 정의 되어 있다.
SBCS 함수 |
WBCS 기반의 문자열 조작 함수 |
strlen |
size_t wcslen |
strcpy |
wchar_t* wcscpy |
strncpy |
wchar_t* wcsncpy |
strcat |
wchar_t* wcstrcat |
strncat |
wchar_t* wcsncat |
strcmp |
int wcscmp |
strncmp |
int wcsncmp |
printf |
int wprintf |
scanf |
int wscanf |
fgets |
wchar_t* fgetws |
fputs |
int fputws |
매개변수 전달인자 유니코드화
=> 데이터형을 wchar_t 을 사용한다.
=> main도 wmain으로 바꾸어 주어야 한다.
유니코드 매개변수 전달 소스코드 |
#include <stdio.h> #include <Windows.h> //fputws()함수 포함 int wmain(int argc, wchar_t* argv[]) { for(int i=1; i<argc; i++) { fputws(argv[i], stdout); fputws(L"\n", stdout); } return 0; }
'컴퓨터' 카테고리의 다른 글
[Linux][Ubuntu] Eclipse 설치 (0) | 2013.07.11 |
---|---|
[Visual Studio] C++ 컴파일 옵션 (0) | 2013.06.14 |
[HTML5] jWebSocket 설치 및 실행 (0) | 2013.06.07 |
[Solid Works] 내가 그릴때 Tip (0) | 2013.06.07 |
[SVN] Visual SVN Server 설치 및 사용방법 (0) | 2013.06.03 |