Windows-datatyper för strängar
De flesta strängåtgärder kan använda samma logik för Unicode- och för Windows-kodsidor. Den enda skillnaden är att den grundläggande åtgärdsenheten är ett 16-bitarstecken (även kallat ett brett tecken) för Unicode och ett 8-bitarstecken för Windows-kodsidor. Windows-huvudfilerna innehåller flera typdefinitioner som gör det enkelt att skapa källor som kan kompileras för Unicode eller för Windows-kodsidor.
Windows stöder tre uppsättningar tecken- och strängdatatyper: en uppsättning generiska typdefinitioner som kan kompileras för unicode- eller Windows-kodsidor och två uppsättningar med specifika typdefinitioner. En uppsättning specifika typdefinitioner är avsedda att användas med Unicode, och den andra används med Windows-kodsidor.
Ett program som använder generiska datatyper kan kompileras för Unicode genom att helt enkelt definiera "UNICODE" före #include-uttrycken för huvudfilerna eller under kompileringen. Nya Windows-program bör använda Unicode för att undvika inkonsekvenser i olika kodsidor och för att förenkla lokaliseringen. De ska skrivas med generiska datatyper och definiera "UNICODE" för att kompilera dessa typer till Unicode-typer. På de få platser där ett program måste fungera med 8-bitars teckendata kan det explicit använda typerna för Windows-kodsidor.
Möjligheten att kompilera de generiska typerna i typer för Windows-kodsidor finns främst för att stödja äldre program. För att kompilera för Windows-kodsidor utelämnar programmet bara UNICODE-definitionen.
I följande exempel visas den metod som används i Windows-huvudfilerna för att definiera de tre uppsättningarna med datatyper. För implementeringen, se Winnt.h-huvudfilen.
// Generic types
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef unsigned char TCHAR;
#endif
typedef TCHAR *LPTSTR, *LPTCH;
// 8-bit character specific
typedef unsigned char CHAR;
typedef CHAR *LPSTR, *LPCH;
// Unicode specific (wide characters)
typedef unsigned wchar_t WCHAR;
typedef WCHAR *LPWSTR, *LPWCH;
Bokstaven "T" i en typdefinition, till exempel TCHAR eller LPTSTR, anger en allmän typ som kan kompileras för antingen Windows-kodsidor eller Unicode. Bokstaven "W" i en typdefinition, till exempel WCHAR eller LPWSTR, anger en Unicode-typ. Eftersom Windows-kodsidor är av det äldre formatet har de enkla typdefinitioner, till exempel CHAR och LPSTR. En fullständig beskrivning av datatyper i Windows finns i Windows-datatyper.
Relaterade ämnen