Difference between revisions of "Character and string types/de"
m (→Array of Char) |
m (→PChar) |
||
Line 53: | Line 53: | ||
== PChar == | == PChar == | ||
+ | |||
+ | '''in Bearbeitung --[[User:Michl|Michl]] 22:49, 1 June 2014 (CEST)''' | ||
A variable of type '''PChar''' is basically a pointer to a '''Char''' type, but allows additional operations. PChars can be used to access C-style null-terminated strings, e.g. in interaction with certain OS libraries or third-party software. | A variable of type '''PChar''' is basically a pointer to a '''Char''' type, but allows additional operations. PChars can be used to access C-style null-terminated strings, e.g. in interaction with certain OS libraries or third-party software. |
Revision as of 22:49, 1 June 2014
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
русский (ru) │
中文(中国大陆) (zh_CN) │
FreePascal unterstützt verschiedene Arten von Zeichen und Zeichenfolgen. Sie reichen von einzelnen ANSI-Zeichen bis hin zu Unicode-Zeichenfolgen und beinhalten auch Zeigertypen. Unterschiede gelten auch für Codierungen und Referenzzählungen.
AnsiChar
Eine Variable vom Typ AnsiChar, auch Char genannt, ist genau 1 Byte groß und enthält ein ANSI-Zeichen.
a |
Referenz
WideChar
Eine Variable vom Typ WideChar, auch als UnicodeChar bezeichnet, ist genau 2 Bytes groß und beinhaltet ein (oder ein Teil von einem) Unicode-Zeichen in UTF-16 codiert. Hinweis: Es ist nicht realisierbar alle Unicode-Codepunkte mit 2 Byte zu codieren. Es ist daher möglich, dass einzelnen Codepunkt mit 2 WideChars codiert sind.
a |
Referenzen
Array of Char
Frühe Pascal-Implementierungen, die vor 1978 in Gebrauch waren, unterstützten keinen Stringtyp (mit Ausnahme von String-Konstanten). Die einzige Möglichkeit zur Speicherung einer Zeichenfolgen in einer Variablen war die Verwendung eines Array of Char. Dieser Ansatz hat viele Nachteile und wird nicht mehr empfohlen. Er wird jedoch immer noch unterstützt, um die Abwärtskompatibilität mit alten Code zu gewährleisten.
type
oldString4 = array[0..4] of char;
begin
oldString4[0] := 'a';
oldString4[1] := 'b';
oldString4[2] := 'c';
oldString4[3] := 'd';
end;
liefert:
a | b | c | d | #0 |
da in Free Pascal Arrays mit Null-Bytes gefüllt sind.
PChar
in Bearbeitung --Michl 22:49, 1 June 2014 (CEST)
A variable of type PChar is basically a pointer to a Char type, but allows additional operations. PChars can be used to access C-style null-terminated strings, e.g. in interaction with certain OS libraries or third-party software.
a | b | c | #0 |
^ |
Reference
PWideChar
A variable of type PWideChar is a pointer to a WideChar variable.
a | b | c | #0 | #0 | |||
^ |
Reference
String
The type string may refer to ShortString or AnsiString, depending from the {$H} switch. If the switch is off ({$H-}) then any string declaration will define a ShortString. It size will be 255 chars, if not otherwise specified. If it is on ({$H+}) string without length specifier will define an AnsiString, otherwise a ShortString with specified length.
ShortString
Short strings have a maximum length of 255 characters with the implicit codepage CP_ACP. The length is stored in the character at index 0.
#3 | a | b | c |
Reference
AnsiString
Ansistrings or UTF8Strings are strings that have no length limit. They are reference counted and are guaranteed to be null terminated. Internally, a variable of type AnsiString is treated as a pointer: the actual content of the string is stored on the heap, as much memory as needed to store the string content is allocated.
a | b | c | #0 | ||||||||
RefCount | Length |
Reference
UnicodeString
Like AnsiStrings, UnicodeStrings are reference counted, null-terminated arrays, but they are implemented as arrays of WideChars instead of regular Chars.
a | b | c | #0 | #0 | |||||||||||
RefCount | Length |
Reference
UTF8String
Currently, the type UTF8String is an alias to the type AnsiString. It is meant to contain UTF8 encoded strings (i.e. unicode data ranging from 1..4 bytes per character) UTF8String is the default string in Lazarus and LCL.
Reference
UTF16String
The type UTF16String is an alias to the type WideString. In the LCL unit lclproc it is an alias to UnicodeString.
Reference
WideString
Variables of type WideString (used to represent unicode character strings in COM applications) resemble those of type UnicodeString, but unlike them they are not reference-counted. On Windows they are allocated with a special windows function which allows them to be used for OLE automation.
WideStrings consist of COM compatible UTF16 encoded bytes on Windows machines (UCS2 on Windows 2000), and they are encoded as plain UTF16 on Linux, Mac OS X and iOS.
a | b | c | #0 | #0 | |||||||
Length |
Reference
PShortString
A variable of type PShortString is a pointer that points to the first byte of a ShortString-type variable.
#3 | a | b | c |
^ |
Reference
PAnsiString
Variables of type PAnsiString are pointers to AnsiString-type variables. However, unlike PShortString-type variables they don't point to the first byte of the header, but to the first char of the AnsiString.
a | b | c | #0 | ||||||||
RefCount | Length | ^ |
Reference
PUnicodeString
Variables of type PUnicodeString are pointers to variables of type UnicodeString.
a | b | c | #0 | #0 | |||||||||||
RefCount | Length | ^ |
Reference
PWideString
Variables of type PWideString are pointers. They point to the first char of a WideString-typed variable.
a | b | c | #0 | #0 | |||||||
Length | ^ |
Reference
See also
--Michl 13:32, 1 June 2014 (CEST)