Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   BigEndian-Verwirrungen beim Unicode? (https://www.delphipraxis.net/154793-bigendian-verwirrungen-beim-unicode.html)

himitsu 25. Sep 2010 14:33

BigEndian-Verwirrungen beim Unicode?
 
Bin grade wieder auf was gestoßen, welches mich irgendwie schon ein paar Mal gewundert hatte.

Code:
Codepage 1200 - Unicode (aka UTF-16)
Codepage 1201 - Unicode Big-Endian
Dieses kennen bestimmt Einige?

Delphi-Quellcode:
s := #$FEFF'123';
ergibt
Delphi-Quellcode:
$FF $FE $31 $00 $32 $00 $33 $00 $34 $00
(Speicherauszug).
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.

http://msdn.microsoft.com/en-us/library/dd317756.aspx

Neutral General 25. Sep 2010 14:37

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")

BUG 25. Sep 2010 14:47

AW: BigEndian-Verwirrungen beim Unicode?
 
Zitat:

Zitat von himitsu (Beitrag 1051848)
Delphi-Quellcode:
s := #$FEFF'123';
ergibt
Delphi-Quellcode:
$FF $FE $31 $00 $32 $00 $33 $00 $34 $00
(Speicherauszug).

Kommt mir das nur so vor, oder steht im Speicherauszug noch eine 4 (
Delphi-Quellcode:
s := #$FEFF'1234';
) :)

himitsu 25. Sep 2010 14:48

AW: BigEndian-Verwirrungen beim Unicode?
 
Zitat:

Zitat von Neutral General (Beitrag 1051849)
BigEndian = Höchwertigstes Byte kommt als erstes ;)

Ich sag ja ... also doch falschrum (bei mir)

Ich glaub ich merk mir das nie, solange BigEndian nicht "mit Groß endend" übersetzt :wall:

BUG 25. Sep 2010 14:52

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:

himitsu 25. Sep 2010 14:56

AW: BigEndian-Verwirrungen beim Unicode?
 
Zitat:

Zitat von BUG (Beitrag 1051850)
Kommt mir das nur so vor, oder steht im Speicherauszug noch eine 4 (
Delphi-Quellcode:
s := #$FEFF'1234';
) :)

du merkst aber och alles :lol:
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:

Zitat von BUG (Beitrag 1051852)
... kommt zuerst ...

Endian klingt nunmal nach Ende/Aufwören und nicht nach Anfangen/Zuerst :oops:

SirThornberry 25. Sep 2010 15:33

AW: BigEndian-Verwirrungen beim Unicode?
 
Ich merke es mir ebenso das ich weiß das x86 immer LitteEndian ist und ich mit
Delphi-Quellcode:
PByte(@YourCardinal)
das zurück bekomme was von der Zahl in ein Byte passt.

himitsu 25. Sep 2010 15:40

AW: BigEndian-Verwirrungen beim Unicode?
 
Zitat:

Zitat von SirThornberry (Beitrag 1051867)
das zurück bekomme was von der Zahl in ein Byte passt.

Das ist ja das Problem ... wenn das größere Byte zuerst im Speicher steht, dann müßte man hier eigentlich das HiByte bekommen und nicht LoByte o.O

Satty67 25. Sep 2010 16:21

AW: BigEndian-Verwirrungen beim Unicode?
 
Zitat:

Zitat von Neutral General (Beitrag 1051849)
BigEndian = Höchwertigstes Byte kommt als erstes ;)

$FEFF => FE FF = Big Endian
$FEFF => FF FE = Little Endian

BigEndian, höchstwertiges Byte am Ende dachte ich... also umgekehrt!? (quasi Big Ende)

$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?)

Neutral General 25. Sep 2010 16:41

AW: BigEndian-Verwirrungen beim Unicode?
 
Also.. Nehmen wir mal dieses Zitat von Wikipedia:

Zitat:

Heutige PC-Systeme (x86-kompatible) verwenden Little-Endian.
dazu nehmen wir folgendes Programm:

Delphi-Quellcode:
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.
Und jetzt wissen wir was LittleEndian bedeutet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:57 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz