![]() |
Einen bestimmten Speicherbereich in einen String kopieren
Puh.....ist das alles kompliziert
also ich hab hier einen Zeiger auf ein IP-Datenpaket, aus dem ich gerne Daten auslesen möchte der Zeiger zeigt mir, soweit ich das verstehe den Anfang des IP-Datenstroms und die Länge des IP-Datenpaketes ist mir auch bekannt. Nun möchte ich den gesammten Inhalt dieses IP-Datenpakets in einen String kopieren. Also wie gesagt, ich besitze einen Pointer auf die Anfangsadresse und die Länge des Datenpaketes. Gibt es irgendeine Funktion wie z.B. CopyInString(Anfangsadresse, Länge) ??? |
Re: Einen bestimmten Speicherbereich in einen String kopiere
Gibt es schon. Aber stellen deine Daten überhaupt einen String dar oder nicht irgenwelche Binärdaten?
|
Re: Einen bestimmten Speicherbereich in einen String kopiere
teils, teils, möchte aber alles erstmal in stringform haben, auch wenns teilweise kryptisch rauskommt
|
Re: Einen bestimmten Speicherbereich in einen String kopiere
ich hab hier mal den record, wwovon ich die daten auslesen müsste, ich bekomme auch eigentlich alles ausgelesen, bis auf .data ...
Delphi-Quellcode:
IP_RHDR = packed record
Verlen: UCHAR; //4bit version 4bit length (bytes/8) Service: UCHAR; // TOS Length: WORD; Ident: WORD; Flagoff: array[0..1] of UCHAR; //3bit flag - 13 bit offset TimeLive: UCHAR; Protocol: UCHAR; Checksum: WORD; SrcIP: array[0..3] of UCHAR; DestIP: array[0..3] of UCHAR; Data: array[0..0] of UCHAR; end; |
Re: Einen bestimmten Speicherbereich in einen String kopiere
Hallo,
dein Record hat einen fixen Vorspann von 20-Byte und einen variablen Anhang (Data). Wenn du ein Paket von 30 Byte hast, dann kannst du den Data-Anteil über Data[0] bis Data[9] adressieren. Die Deklaration eines einzigen Array-Elements reicht aus um bei der Adressierung auf Zeiger-Arithmetik umstellen zu können- falls du nicht mit ausgeschaltetem Range-Checking arbeiten möchtest. Grüße vom marabu |
Re: Einen bestimmten Speicherbereich in einen String kopiere
hmm ok ok
kannst du mir bitte mal ein bischen code aufschreiben, wie ich den variablen data-bereich in einen string bekomme ? |
Re: Einen bestimmten Speicherbereich in einen String kopiere
in etwa so:
Delphi-Quellcode:
Die Laenge ist entsprechend die Länges des Records+die Länge von Data (Es schadet aber i.A. nicht mehr zu nehmen)
function copytoString(Adresse:pointer;laenge:integer):string;
begin setlength(result,laenge); move(Adresse^,result[1],laenge); end; Wahrscheinlich bekommst du die Länge von Data aus dem xyz.Data[0] heraus. Damit ist Länge bei dir =sizeof(Record)+ord(Record.Data[0]) |
Re: Einen bestimmten Speicherbereich in einen String kopiere
Alternativ - wenn du es unbedingt in einem String haben möchtest:
Delphi-Quellcode:
Getippt und nicht getestet.
const
IP4P_HDRLEN = 20; var s: string; pr: ^IP_RDHDR; begin SetString(s, PChar(@pr.Data), pr.Length - IP4PHDRLEN); end; Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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 by Thomas Breitkreuz