AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BigEndian/LittleEndian (mal wieder)

Ein Thema von KFAF · begonnen am 15. Jan 2014 · letzter Beitrag vom 17. Jan 2014
Antwort Antwort
KFAF

Registriert seit: 5. Mai 2011
12 Beiträge
 
Delphi XE3 Professional
 
#1

AW: BigEndian/LittleEndian (mal wieder)

  Alt 16. Jan 2014, 14:27
himitsu, ich glaube du hast da was verkehrt.

Bei einen Little-Endian ist das niederwertigste Byte doch am Ende, bei einem Big-Endian am Anfang. D.h., dein Beispiel müsste genau anders herum sein: lese ich auf einem LE System das erste Byte von 48879 ($BEEF) bekomme ich BE, auf BE bekomm' ich EF.

Aber um wieder zum Thema zu kommen: Der Code funktioniert trotzdem, weil ...? Der Compiler die bitwise-Operationen sowiese auf jedem System nur auf eine Art ausführt?!

Folgendes Beispiel:
Zahl X liegt in einem WORD im Speicher.
Dann gilt : LE_X shr 8 = BE_X shr 8, weil die CPU die Werte sowieso in der selben Reihenfolge schieben muss (sonst wäre es ja kein shift sondern ein shift and rotate), und nur der Speicher anders ist, oder?

Geändert von KFAF (16. Jan 2014 um 14:30 Uhr)
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: BigEndian/LittleEndian (mal wieder)

  Alt 16. Jan 2014, 14:55
himitsu, ich glaube du hast da was verkehrt.

Bei einen Little-Endian ist das niederwertigste Byte doch am Ende, bei einem Big-Endian am Anfang. D.h., dein Beispiel müsste genau anders herum sein: lese ich auf einem LE System das erste Byte von 48879 ($BEEF) bekomme ich BE, auf BE bekomm' ich EF.
Was hast Du denn für ein komisches LE-System? Auf allen meinen LE-Windows/Intel-Systemen mit FPC und Delphi erhalte ich mit
Delphi-Quellcode:
var
  w: word;
  b: byte absolute w;
begin
  w := $BEEF;
  writeln(b);
end.
die Ausgabe 239 = $EF.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#3

AW: BigEndian/LittleEndian (mal wieder)

  Alt 17. Jan 2014, 06:57
Um mal das Testprogramm von gammatester aufzugreifen:

Delphi-Quellcode:
program tendiantest;

var
  w: Word = $BEEF;
  b: Byte absolute w;
begin
  (* Hinweis: hexstr ist bei FPC eine Funktion in System, welche das
  *          gleiche macht wie IntToHex. Da SysUtils unter M68k noch
  *          bockt, konnte ich die jedoch nicht verwenden...
   *)

  Writeln(hexstr(b, 2));
  Writeln(hexstr(w shl 4, 4));
  Writeln(hexstr(w shr 4, 4));
end.
Ergebnis i386:

EF
EEF0
0BEE

Ergebnis m68k:

BE
EEF0
0BEE

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 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