Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Von C nach Delphi (https://www.delphipraxis.net/207280-von-c-nach-delphi.html)

js747a 9. Mär 2021 14:33

Von C nach Delphi
 
Hallo, ich versuche einen Code von C nach Delphi zu übersetzen um Teile davon in meinem Modellbahnprogramm zu benutzen.

Kann jemand diese Zeile übersetzen. ??

received ist ein Array of Byte
i = (received[7]<<24)+(received[6]<<16)+(received[5]<<8)+(received[4]);
Die Bytes 4 bis 7 sollen eine Seriennummer 32 Bit (little endian) sein


Ich habe mal versucht mit
x : Integer;
BArray Array[0..7] of Byte;

x := BArray[7] shl 24;
x := x + BArray[6] shl 16;
x := x + BArray[5] shl 8;
x := x + BArray[4];

Hier ist x weit entfernt von der richtigen Nr


x := BArray[7] shl 16;
x := x + BArray[6] shl 8;
x := x + BArray[5] shr 8;
x := x + BArray[4] shr 16;

Hier ist x schon näher dran an der richtigen Nr

himitsu 9. Mär 2021 15:00

AW: Von C nach Delphi
 
Delphi-Quellcode:
x := (Integer(BArray[7]) shl 24)
  or (Integer(BArray[6]) shl 16)
  or (Integer(BArray[5]) shl 8);
  or BArray[4];
Bevor du die Bits verschieben kannst, mußt du eventuell den Typ auch noch auf die richtige Größte bringen, damit die Bits nicht rausrutschen.

Rein logisch war auch im C das + schon nicht ganz richtig und es sollte eigentlich ein OR sein.
Denn wenn im BArray[7] das größte Bit gesetzt ist, dann wird Dieses zum Vorzeichen des Bei Google suchenZweierkomplement und nachfolgend die arithmetische Addition der anderen Bytes geht schief.

mensch72 9. Mär 2021 15:16

AW: Von C nach Delphi
 
sowas rechnet man niemals mit Vorzeichen behafteten Typen!
(also cardinal statt integer)

x:cardinal;
BArray: Array[0..7] of Byte;

x := BArray[7];
x := x shl 8;
x := x or BArray[6];
x := x shl 8;
x := x or BArray[5];
x := x shl 8;
x := x or BArray[4];


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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