![]() |
Teil eines PChar in Integer umwandeln
Hallo Zusammen,
Delphi-Quellcode:
ich empfange über TCP ein Paket mit einer Länge von 28 Bytes die in einer PChar Variable RcvdHeader abgelegt werden.
RcvdHeaderSize := 28;
GetMem(RcvdHeader, RcvdHeaderSize); Die letzten 4 Bytes sind die Länge des nächsten Paketes in BigEndian z.B.: 0x80 0x25 0x00 0x00 für die Länge 9600. Wie lassen sich bitte die vier letzten Bytes relativ schnell in integer umwandeln da die Daten weiter fliesen. Gruß Kostas |
AW: Teil eines PChar in Integer umwandeln
Delphi-Quellcode:
Endian-ess umwandeln kannst du danach mit einer der hier vorgeschlagenen Lösungen machen:
PInteger(PByte(RcvdHeader) + 24)^
![]() |
AW: Teil eines PChar in Integer umwandeln
Am einfachsten wäre ein record
Delphi-Quellcode:
Ich halte es allerdings für sehr ungewöhnlich, daß eine Längenangabe Teil eines pchar sein soll.
tmyrecord = packed record
text : Array [1..24] of char; lange : Integer; end; Gruß K-H |
AW: Teil eines PChar in Integer umwandeln
Zitat:
Delphi-Quellcode:
bevorzuge.
Pointer
|
AW: Teil eines PChar in Integer umwandeln
Zitat:
ich habe versucht dein Vorschlag umzusetzen, doch leider bekomme ich einen Felher "Operator ist für den Operantentyp nicht anwendbar"
Delphi-Quellcode:
function Swap4(n: Cardinal): Cardinal; asm bswap eax end; function GetNextLength(aRcvdBuf:PChar; aRcvdSize:integer):integer; begin result := 0; if aRcvdSize>4 then begin result := PInteger(PByte(aRcvdBuf) + aRcvdSize-4)^; <<< Operator ist für den Operantentyp nicht anwendbar. result := Swap4(result); end; end; Herzlichen Dank für die Hilfe. |
AW: Teil eines PChar in Integer umwandeln
So müsste es gehn
Delphi-Quellcode:
result := PInteger(Cardinal(aRcvdBuf) + aRcvdSize-4)^; // statt Integer musst du ggf. NativeUInt benutzen bei 64-Bit
|
AW: Teil eines PChar in Integer umwandeln
Ihr seit große Klasse, es funktioniert einwandfrei.
Ich habe das ganze Jahr nichts mit Pointern zu tun. Herzlichen Dank nochmal an alle. Einen schönen Abend noch Gruß Kostas |
AW: Teil eines PChar in Integer umwandeln
Zitat:
Delphi-Quellcode:
casten.
PByte()
Delphi-Quellcode:
sollte auch funktionieren, aber die PByte Variante ist empfohlen.
NativeUInt
Probiers mal mit
Delphi-Quellcode:
Result := PInteger(PByte(aRcvdBuf) + (aRcvdSize - 4))^
|
AW: Teil eines PChar in Integer umwandeln
Zitat:
|
AW: Teil eines PChar in Integer umwandeln
Zitat:
funktioniert leider nicht, zumindest nicht mit Delphi5 (nicht XE5) ist für ein altes Projekt. Hingegen mit Cardinal schon. Für mich ist das völlig ausreichend. Bitte noch eines, wie kann ich aus dem gleichen Buffer einen bestimmten Bereich in ein String schreiben? In der Hilfe über String-Verarbeitung (nullterminiert) suche ich nach etwas wie copy aber das gibt es nicht. |
AW: Teil eines PChar in Integer umwandeln
Zitat:
Zitat:
Delphi-Quellcode:
var
S: String; begin SetLength(S, 42); CopyMemory(@S[1], Pointer(Cardinal(Buffer) + Offset), 42); |
AW: Teil eines PChar in Integer umwandeln
Perfekt, es funktioniert einwandfrei.
Herzlichen Dank nochmal. Gruß Kostas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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