Tipi di dati SBCS e MBCSSBCS and MBCS Data Types

Qualsiasi routine della libreria di runtime Microsoft MBCS che gestisce un solo carattere multibyte o un byte di un carattere multibyte prevede un argomento unsigned int (dove 0x00 <= valore del carattere <= 0xFFFF e 0x00 <= valore del byte <= 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 ). Una routine MBCS che gestisce i byte o i caratteri multibyte in un contesto di stringa prevede una stringa di caratteri multibyte da rappresentare come puntatore 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.

Attenzione

Ogni byte di un carattere multibyte può essere rappresentato in un char a 8 bit.Each byte of a multibyte character can be represented in an 8-bit char. Tuttavia, un carattere a byte singolo SBCS o MBCS di tipo char con un valore maggiore di 0x7F è negativo.However, an SBCS or MBCS single-byte character of type char with a value greater than 0x7F is negative. Quando tale carattere viene convertito direttamente in int o in long, il risultato viene esteso con segno dal compilatore e può pertanto generare risultati imprevisti.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.

Pertanto è consigliabile rappresentare un byte di un carattere multibyte come un unsigned char a 8 bit.Therefore it is best to represent a byte of a multibyte character as an 8-bit unsigned char. In alternativa, per evitare un risultato negativo, convertire semplicemente un carattere a byte singolo di tipo char in un unsigned char prima di convertirlo in un int o in un 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.

Poiché alcune funzioni SBCS di gestione delle stringhe utilizzano parametri char* (con segno), verrà visualizzato un messaggio di avviso del compilatore per segnalare un tipo non corrispondente quando _MBCS viene definito.Because some SBCS string-handling functions take (signed) char* parameters, a type mismatch compiler warning will result when _MBCS is defined. Esistono tre modi per evitare questo problema, elencati in ordine di efficienza:There are three ways to avoid this warning, listed in order of efficiency:

  1. Utilizzare le funzioni inline indipendenti dai tipi in TCHAR.H.Use the "type-safe" inline functions in TCHAR.H. Comportamento predefinito.This is the default behavior.

  2. Utilizzare le macro dirette in TCHAR.H definendo _MB_MAP_DIRECT nella riga di comando.Use the "direct" macros in TCHAR.H by defining _MB_MAP_DIRECT on the command line. In questo caso, è necessario abbinare manualmente i tipi.If you do this, you must manually match types. È il metodo più veloce, ma non è indipendente dai tipi.This is the fastest method but is not type-safe.

  3. Utilizzare le funzioni della libreria collegata staticamente indipendente dai tipi in TCHAR.H.Use the "type-safe" statically linked library functions in TCHAR.H. A tale scopo, definire la costante _NO_INLINING nella riga di comando.To do so, define the constant _NO_INLINING on the command line. Questo è il metodo più lento, ma quello più indipendente dai tipi.This is the slowest method, but the most type-safe.

Vedere ancheSee Also

Internazionalizzazione Internationalization
Routine di runtime per categoriaRun-Time Routines by Category