![]() |
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 |
AW: Von C nach Delphi
Delphi-Quellcode:
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.
x := (Integer(BArray[7]) shl 24)
or (Integer(BArray[6]) shl 16) or (Integer(BArray[5]) shl 8); or BArray[4]; 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 ![]() |
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 09:25 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