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 che una stringa di caratteri multibyte sia rappresentata 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 un byte 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 un carattere come questo 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 di gestione delle stringhe SBCS usano parametri char\* (con segno), quando _MBCS viene definito, il compilatore genera un avviso di mancata corrispondenza di tipo.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. Usare 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. Usare 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. Usare 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

InternazionalizzazioneInternationalization
Routine di Universal C Runtime per categoriaUniversal C runtime routines by category