본문 바로가기

기타

SBCS, MBCS, WBCS

SBCS, MBCS, WBCS

  • SBCS ( Single Byte Character Set )

    • 문자를 표현하는데 있어서 1바이트만 사용하는 방식.
    • 대표적으로 아스키코드가 해당된다.
  • MBCS( Multi Byte Character Set )

    • 문자를 표현하는데 있어서 다양한 바이트 수를 이용한다. (어떤 문자는 1바이트, 어떤문자는 2바이트)

      ex) 한글은 2바이트 영어는 1바이트 처리.

    • MBCS는 SBCS를 포함하고있다.

    • 유니코드는 MBCS에 포함되지 않는다.

  • WBCS( Wide Byte Character Set )

    • 유니코드에 해당
    • 모든 문자를 2바이트로 처리한다.
  • char(SBCS) => wchar_t(WBCS)

wchar_t는 typedef unsigned short wchar_t이다.

  • "ABC" => L"ABC"

L""은 WBCS로 문자열을 처리해라, 라는 의미를 가진다. (Null도 2바이트 처리)

  • SBCS기반 문자열 조작 함수로 WBCS 문자를 조작할 수 없다.

    • strlen => wcslen

    • strcpy => wcscpy

    • strncpy => wcsncpy

    • strcat => wcscat

    • strncat => wcsncat

    • strcmp => wcscmp

    • strncmp => wcsncmp

    • printf => wprintf

    • scanf => wscanf

    • fgets => fgetws

    • fputs => fputws

예시.

#include <stdio.h>
#include <string.h>

int main()
{
    wchar_t str[] = L"ABC";
    int size = sizeof(str);
    int len = wcslen(str);

    printf("배열의 크기 : %d \n", size);
    printf("문자열 길이 : %d \n", len);

    return 0;
}
배열의 크기 : 8
문자열 길이 : 3
  • 배열의 크기는 WBCS이기에 한 문자당 2Byte + NULL(2Byte) 포함 = 8바이트가 나온다.
  • 문자열 길이는 보이는것과 같이 ABC = 3으로 나온다.

main, wmain

int main(int argc, char* argv[])
int wmain(int argc, w_char* argv[])
  • main은 인자값이 넘어갈때 MBCS로 넘어간다.
  • wmain은 인자값이 넘어갈때 WBCS로 넘어간다.
반응형

'기타' 카테고리의 다른 글

Unresolved reference: ext  (0) 2020.04.18
Cannot add task 'clean' as a task with that name already exists.  (0) 2020.04.18
유클리드 호제법  (0) 2020.04.04
초보자를 위한 AVISPA 간단 정리  (0) 2019.12.11
네트워크 이중화 종류  (0) 2019.07.16