티스토리 뷰
1. 윈도우는 유니코드 문자를 UTF-16로 인코딩
: 각 문자를 2바이트(16비트)로 구성함.
: 몇몇 소수 언어들은 2바이트도 부족한 경우가 존재. 그래서 4바이트 인코딩 방법도 존재는 함
2. 유니코드 문자열 선언
:wchar_t name = L'Ronaldo';
:wchar_t dataBuf[100] = L"Cristiano Ronaldo"; //99개의 16비트 문자와 16비트 문자열 종결 문자 0
: 윈도우를 개발한 팀에서 c언어의 자료형과 윈도우 자료형을 구분하기 위해 WinNT.h에 아래와 같이 정의해둠
typedef char CHAR; // 8비트 문자
typedef wchar_t WCHAR // 16비트 문자
: 또한 문자와 문자열을 가리키는 포인터 자료형에 대해서도 아래와 같이 정의함
// 8비트 문자열 포인터
typedef CHAR * PCHAR;
typedef CHAR * PSTR;
typedef CONST CHAR * PCSTR
//16비트 문자열 포인터
typedef WCHAR * PWCHAR;
typedef WCHAR * PWSTR;
typedef CONST CHAR * PCWSTR;
3. c 스타일 문자열 함수들을 사용하지 말자.
:strcpy , wcscpy와 같은 함수들은 최대 크기를 인자로 받지 않는다.
: 그게 보안 취약점으로써 다양한 멜웨어 공격을 받았었다. 메모리에 문제가 생겨도 에러를 못보고,
메모리가 정상적으로 돌아가는지 알 길이 없었다.ㅣ
: _s 함수를 적극 이용하자.(나는 그동안 잘 안썻었는데, 이건 필수인거 같다)
4. 왜 유니코드를 사용해야 하나?
: 다른 나라의 언어로 애플리케이션을 지역화 하기 용이함
: 코드가 더 빠르게 수행되고 더 적은 메모리를 사용(윈도우는 내부적으로 유니코드로 구성된 문자, 문자열을 사용,
ANSI 문자나 문자열을 전달하면 새롭게 메모리를 할당하고 변경해야 하기때문)
: 윈도우가 제공하는 모든 함수들을 쉽게 사용.
: 닷넷 프레임워크와 호환성이 좋음(닷넷은 유니코드만 사용)
5. 개발할 때 생각해야 하는 것
: 문자열은 char배열 , byte배열로 보지 말고, 문자의 배열로 생각해라
: 문자나 문자열을 나타낼 경우 중립 자료형을 사용해라(TCHAR/PTSTR)
: 바이트나 바이트를 가리키는 포인터 , 데이터 버퍼를 표현하기위해서는 BYTE, PBYTE를 사용해라
: 문자나 문자열 상수 값을 표현할 때는 TEXT, _T 매크로를 사용해라.
: 산술적인 계산 부분을 수정해라. 가령 버퍼의 크기를 전달 할 때 바이트 단위가 아닌
'운영체제' 카테고리의 다른 글
메모리에 관한 이야기 (0) | 2019.04.28 |
---|---|
스레드 동기화 정리 (0) | 2019.04.27 |
thread 정리 (0) | 2019.04.22 |
커널 오브젝트 , 핸들 (0) | 2019.04.21 |
프로세스 정리 (1) | 2019.04.20 |