Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Big Endian Little Endian tauschen von smallint Wert und von normalem integer Wert (https://www.delphipraxis.net/152383-big-endian-little-endian-tauschen-von-smallint-wert-und-von-normalem-integer-wert.html)

Delphiuser1987 21. Jun 2010 09:28

Delphi-Version: 2010

Big Endian Little Endian tauschen von smallint Wert und von normalem integer Wert
 
Hi, brauch mal wieder dringend Hilfe.
Ich muss von einem smallint Wert und von einem normalen integer Wert Big Endian und little Edian tauschen.
Bitte um Hilfe von euch, danke :thumb::-D

mkinzler 21. Jun 2010 09:41

AW: Big Endian Little Endian tauschen von smallint Wert und von normalem integer Wert
 
Delphi-Quellcode:
t1 := wert DIV 65536;
t2 := wert MOD 65536;
nwert := t2 * 65536 + t1;

Uwe Raabe 21. Jun 2010 09:44

AW: Big Endian Little Endian tauschen von smallint Wert und von normalem integer Wert
 
Delphi-Quellcode:
uses
  Sysutils;

function SwapEndianSmallInt(Value: SmallInt): SmallInt;
begin
  result := System.Swap(Value);
end;

function SwapEndianInteger(Value: Integer): Integer;
begin
  LongRec(result).Lo := System.Swap(LongRec(Value).Hi);
  LongRec(result).Hi := System.Swap(LongRec(Value).Lo);
end;

jfheins 21. Jun 2010 09:44

AW: Big Endian Little Endian tauschen von smallint Wert und von normalem integer Wert
 
http://www.delphipraxis.net/125740-e...rtauschen.html

himitsu 21. Jun 2010 10:06

AW: Big Endian Little Endian tauschen von smallint Wert und von normalem integer Wert
 
Zitat:

Zitat von mkinzler (Beitrag 1030537)
Delphi-Quellcode:
t1 := wert DIV 65536;
t2 := wert MOD 65536;
nwert := t2 * 65536 + t1;

Bei einem vorzeichenbehafteten Typen solltest du aufpassen und besser keine mathematischen Operatioen verwenden oder diesen erstmal in einen Vorzeichenlosen casten. :stupid:

gammatester 21. Jun 2010 10:20

AW: Big Endian Little Endian tauschen von smallint Wert und von normalem integer Wert
 
Zitat:

Zitat von himitsu (Beitrag 1030542)
Zitat:

Zitat von mkinzler (Beitrag 1030537)
Delphi-Quellcode:
t1 := wert DIV 65536;
t2 := wert MOD 65536;
nwert := t2 * 65536 + t1;

Bei einem vorzeichenbehafteten Typen solltest du aufpassen und besser keine mathematischen Operatioen verwenden oder diesen erstmal in einen Vorzeichenlosen casten. :stupid:

Und das ist noch das kleinere Problem! Hier werden nur die beiden 16-Bit-Teile getauscht, aber das ist keine Big <-> Little-Endian-Umwandlung, liefert zB für $23456789 den angeblichen Wert $67892345 statt $89674523. Mit purem Pascal hier eine korrekte Umwandlung:
Delphi-Quellcode:
function RB(A: longint): longint;
  {-Umwandlung Big - Little Endian}
begin
  RB := ((A and $FF) shl 24) or ((A and $FF00) shl 8) or ((A and $FF0000) shr 8) or ((A and longint($FF000000)) shr 24);
end;

Delphiuser1987 21. Jun 2010 11:33

AW: Big Endian Little Endian tauschen von smallint Wert und von normalem integer Wert
 
danke Leute hat wunderbar funktioniert
wie immer halt :thumb::thumb::-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 Uhr.

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