![]() |
BigEndian-Verwirrungen beim Unicode?
Bin grade wieder auf was gestoßen, welches mich irgendwie schon ein paar Mal gewundert hatte.
Code:
Dieses kennen bestimmt Einige?
Codepage 1200 - Unicode (aka UTF-16)
Codepage 1201 - Unicode Big-Endian
Delphi-Quellcode:
ergibt
s := #$FEFF'123';
Delphi-Quellcode:
(Speicherauszug).
$FF $FE $31 $00 $32 $00 $33 $00 $34 $00
Dieses entspricht der Codepage 1200 und wenn man genau hinguckt, dann ist das doch BigEndian, denn die höherwertige Bytes kommen als Letztes. :gruebel: Was ist also nun richtig? Ich komme zwar ständig beim Windows durcheinander, also ob der Integer Big- oder LitleEndian ist, also k.A. und vielleicht bin ich auch nur schonwieder falsch. ![]() |
AW: BigEndian-Verwirrungen beim Unicode?
BigEndian = Höchwertigstes Byte kommt als erstes ;)
$FEFF => FE FF = Big Endian $FEFF => FF FE = Little Endian Prinzipiell sind bei x86 CPUs alle Daten(typen) LittleEndian. (Es sei denn man speichert sie explizit "falschrum") |
AW: BigEndian-Verwirrungen beim Unicode?
Zitat:
Delphi-Quellcode:
) :)
s := #$FEFF'1234';
|
AW: BigEndian-Verwirrungen beim Unicode?
Zitat:
Ich glaub ich merk mir das nie, solange BigEndian nicht "mit Groß endend" übersetzt :wall: |
AW: BigEndian-Verwirrungen beim Unicode?
Das dicke Ende (der Zahl) kommt zuerst ...
... ich merke es mir tatsächlich so, das ich weiß, das mein PC LittleEndian ist und dort die Zahlen "falsch herum" im Speicher liegen :stupid: |
AW: BigEndian-Verwirrungen beim Unicode?
Zitat:
das war die von Hand gekürzte Variante von
Delphi-Quellcode:
.
#$FEFF'1234567'
Wo ich wohl ein bissl falsch gekürzt und abgeschrieben hab. Blöd halt, denn man kann sich die "angezeigten" Werte der überwachten Variablen immernoch nicht kopieren. Zitat:
|
AW: BigEndian-Verwirrungen beim Unicode?
Ich merke es mir ebenso das ich weiß das x86 immer LitteEndian ist und ich mit
Delphi-Quellcode:
das zurück bekomme was von der Zahl in ein Byte passt.
PByte(@YourCardinal)
|
AW: BigEndian-Verwirrungen beim Unicode?
Zitat:
|
AW: BigEndian-Verwirrungen beim Unicode?
Zitat:
$1234 => 34 12 = Big Endian $1234 => 12 34 = Little Endian €: Nachgeschaut: BigEndian, höchstwertigstes Byte an der höchsten Speicheradresse. Also im Stream am Ende ankommend? LittleEndian, höchstwertiges Byte kommt an erster Speicheradresse, als erstes aus dem Stream, mit niedrigsten Index im String... (bin mir so langsam fast sicher) (irgendwie glaube ich, Beschreibung richtig, Darstellung falsch umd bei NG umgekehrt?) |
AW: BigEndian-Verwirrungen beim Unicode?
Also.. Nehmen wir mal dieses Zitat von Wikipedia:
Zitat:
Delphi-Quellcode:
Und jetzt wissen wir was LittleEndian bedeutet.
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; var Int: Word; B: PByte; begin Int := $ABCD; writeln('Wert: $ABCD'); write('Speicher: '); B := @Int; write('$',IntToHex(B^,2),', '); inc(B); write('$',IntToHex(B^,2)); readln; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz