SBCS 및 MBCS 데이터 형식SBCS and MBCS Data Types

하나의 멀티바이트 문자 또는 1바이트의 멀티바이트 문자만 처리하는 Microsoft MBCS 런타임 라이브러리 루틴에는 unsigned int 인수가 필요합니다. 여기서 0x00 <= 문자 값은 <= 0xFFFF이고, 0x00 <= 바이트 값은 <= 0xFF입니다.Any Microsoft MBCS run-time library routine that handles only one multibyte character or one byte of a multibyte character expects an unsigned int argument (where 0x00 <= character value <= 0xFFFF and 0x00 <= byte value <= 0xFF ). 문자열 컨텍스트에서 멀티바이트 바이트 또는 문자를 처리하는 MBCS 루틴에서는 멀티바이트 문자열을 unsigned char 포인터로 표현해야 합니다.An MBCS routine that handles multibyte bytes or characters in a string context expects a multibyte-character string to be represented as an unsigned char pointer.


멀티바이트 문자의 각 바이트는 8비트 char로 표현될 수 있습니다.Each byte of a multibyte character can be represented in an 8-bit char. 그러나 값이 0x7F보다 큰 char 형식의 SBCS 또는 MBCS 싱글바이트 문자는 음수입니다.However, an SBCS or MBCS single-byte character of type char with a value greater than 0x7F is negative. 이러한 문자가 int 또는 long으로 직접 변환되면, 결과는 컴파일러에서 부호 확장되므로 예기치 않은 결과가 발생할 수 있습니다.When such a character is converted directly to an int or a long, the result is sign-extended by the compiler and can therefore yield unexpected results.

따라서 멀티바이트 문자의 바이트를 8비트 unsigned char로 표현하는 것이 가장 좋습니다.Therefore it is best to represent a byte of a multibyte character as an 8-bit unsigned char. 또는 음수 결과를 방지하기 위해 char 형식의 싱글바이트 문자를 먼저 unsigned char로 변환한 다음, int 또는 long으로 변환합니다.Or, to avoid a negative result, simply convert a single-byte character of type char to an unsigned char before converting it to an int or a long.

일부 SBCS 문자열 처리 함수는 (signed) char\* 매개 변수를 사용하기 때문에 _MBCS가 정의되면 형식 불일치 컴파일러 경고가 발생합니다.Because some SBCS string-handling functions take (signed) char\* parameters, a type mismatch compiler warning will result when _MBCS is defined. 이 경고를 피하기 위한 세 가지 방법이 유용성 순서대로 나열됩니다.There are three ways to avoid this warning, listed in order of efficiency:

  1. TCHAR.H에 형식이 안전한 인라인 함수를 사용합니다.Use the type-safe inline functions in TCHAR.H. 이것은 기본적인 동작입니다.This is the default behavior.

  2. 명령줄에서 _MB_MAP_DIRECT를 정의하여 TCHAR.H에 직접 매크로를 사용합니다.Use the direct macros in TCHAR.H by defining _MB_MAP_DIRECT on the command line. 이렇게 하는 경우 형식을 수동으로 일치시켜야 합니다.If you do this, you must manually match types. 이는 속도가 가장 빠른 방법이지만 형식이 안전하지 않습니다.This is the fastest method but is not type-safe.

  3. TCHAR.H에 형식이 안전한 정적 링크 라이브러리 함수를 사용합니다.Use the type-safe statically linked library functions in TCHAR.H. 이렇게 하려면 명령줄에서 _NO_INLINING 상수를 정의합니다.To do so, define the constant _NO_INLINING on the command line. 이는 속도가 가장 느린 방법이지만 형식은 가장 안전합니다.This is the slowest method, but the most type-safe.

참고 항목See Also

범주별 유버니설 C 런타임 루틴Universal C runtime routines by category