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보다 큰 SBCS 형식의 MBCS 또는 char 싱글바이트 문자는 음수입니다.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 문자열 처리 함수는 (부호 있는) 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에 "direct" 매크로를 사용합니다.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

국제화 Internationalization
범주별 런타임 루틴Run-Time Routines by Category