AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Einen bestimmten Speicherbereich in einen String kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Einen bestimmten Speicherbereich in einen String kopieren

Ein Thema von meisteralex · begonnen am 16. Jul 2007 · letzter Beitrag vom 16. Jul 2007
Antwort Antwort
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#1

Einen bestimmten Speicherbereich in einen String kopieren

  Alt 16. Jul 2007, 12:07
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) ???
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Einen bestimmten Speicherbereich in einen String kopiere

  Alt 16. Jul 2007, 12:08
Gibt es schon. Aber stellen deine Daten überhaupt einen String dar oder nicht irgenwelche Binärdaten?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#3

Re: Einen bestimmten Speicherbereich in einen String kopiere

  Alt 16. Jul 2007, 12:11
teils, teils, möchte aber alles erstmal in stringform haben, auch wenns teilweise kryptisch rauskommt
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#4

Re: Einen bestimmten Speicherbereich in einen String kopiere

  Alt 16. Jul 2007, 12:15
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;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Einen bestimmten Speicherbereich in einen String kopiere

  Alt 16. Jul 2007, 12:33
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
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#6

Re: Einen bestimmten Speicherbereich in einen String kopiere

  Alt 16. Jul 2007, 13:04
hmm ok ok
kannst du mir bitte mal ein bischen code aufschreiben, wie ich den variablen data-bereich in einen string bekomme ?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Einen bestimmten Speicherbereich in einen String kopiere

  Alt 16. Jul 2007, 13:12
in etwa so:
Delphi-Quellcode:
function copytoString(Adresse:pointer;laenge:integer):string;
begin
  setlength(result,laenge);
  move(Adresse^,result[1],laenge);
end;
Die Laenge ist entsprechend die Länges des Records+die Länge von Data (Es schadet aber i.A. nicht mehr zu nehmen)
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])
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Einen bestimmten Speicherbereich in einen String kopiere

  Alt 16. Jul 2007, 13:36
Alternativ - wenn du es unbedingt in einem String haben möchtest:

Delphi-Quellcode:
const
  IP4P_HDRLEN = 20;
var
  s: string;
  pr: ^IP_RDHDR;
begin
  SetString(s, PChar(@pr.Data), pr.Length - IP4PHDRLEN);
end;
Getippt und nicht getestet.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:58 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