Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hilfe bei Pointer auf Array of Byte (https://www.delphipraxis.net/148428-hilfe-bei-pointer-auf-array-byte.html)

ryLIX 1. Mär 2010 18:56


Hilfe bei Pointer auf Array of Byte
 
Hi,
ich bin durch Hilfe im Forum nun an einem Punkt angekommen wo mir irgendwie das Verständnis zu Pointern fehlt.
Es geht um einen Parser für Daten im little Endian Format.

Funktion:
Delphi-Quellcode:
function ParseData(ASize: Cardinal; AData: PByte; AArgs: AnsiString): string;
Aufruf:
Delphi-Quellcode:
ParseData(ABlock.Size, @ABlock.Data[0], GDefinitons[Index].DataFormat);
ABlock.Size ist die Größe des eingelesenen Blocks (feste Satzlänge in der Datei).
ABlock.Data ist ein Array of Byte.
GDefinitons.DataFormat enthält einen String welcher angibt welche Daten ABlock.Data von 0 bis ABlock.Size enthält.
Das könnten Daten im String, Byte, Word, DoubleWord oder LongWord sein.
Diese Daten sind dur NULL von einander getrennt. Sprich #0 Terminierte Strings usw.

Mein Problem liegt nun darin die Daten in ParseData so zu trennen das ich diese auch dementsprechend verarbeiten kann.
Wenn AData vom Typ PByte ist kann ich ja nicht über den Index des Arrays auf die Daten zugreifen.
Ich habe z.B. zwei Strings(AArgs = 'SS') in AData und ASize ist 10 dann enthält AData 2 Strings die jeweils 4 Zeichen + NULL sind.
Jetzt kann ich aber über SetString immer nur auf den ersten String zugreifen.
Wie bekomme ich den zweiten String bzw die folgenden Daten?

Amateurprofi 1. Mär 2010 19:17

Re: Hilfe bei Pointer auf Array of Byte
 
Zitat:

Zitat von ryLIX
Hi,
Ich habe z.B. zwei Strings(AArgs = 'SS') in AData und ASize ist 10 dann enthält AData 2 Strings die jeweils 4 Zeichen + NULL sind.
Jetzt kann ich aber über SetString immer nur auf den ersten String zugreifen.
Wie bekomme ich den zweiten String bzw die folgenden Daten?

Dann erhöhe doch den Pointer entsprechend.
Inc(AData,5)
Dann zeigt AData auf den zweiten String.

ryLIX 1. Mär 2010 19:26

Re: Hilfe bei Pointer auf Array of Byte
 
Zitat:

Zitat von Amateurprofi
Zitat:

Zitat von ryLIX
Hi,
Ich habe z.B. zwei Strings(AArgs = 'SS') in AData und ASize ist 10 dann enthält AData 2 Strings die jeweils 4 Zeichen + NULL sind.
Jetzt kann ich aber über SetString immer nur auf den ersten String zugreifen.
Wie bekomme ich den zweiten String bzw die folgenden Daten?

Dann erhöhe doch den Pointer entsprechend.
Inc(AData,5)
Dann zeigt AData auf den zweiten String.

Ich musste grad feststellen das ich den Fehler an der falschen Stelle gesucht habe.
Beim debugging grad hab ich gesehen das mein durch SetString erzeugter String beide Strings getrennt durch #0 enthält z.B. 'Foo'#0'Bar'.

Jetzt sollte ich das ganze doch mit Pos() und Copy() zerlegen können oder erkennt Pos() #0 nicht?

Amateurprofi 1. Mär 2010 22:57

Re: Hilfe bei Pointer auf Array of Byte
 
Zitat:

Zitat von ryLIX
Beim debugging grad hab ich gesehen das mein durch SetString erzeugter String beide Strings getrennt durch #0 enthält z.B. 'Foo'#0'Bar'.

Jetzt sollte ich das ganze doch mit Pos() und Copy() zerlegen können oder erkennt Pos() #0 nicht?

Pos findet auch #0, zumindest unter Delphi 2005.
Ich weiß aber nicht, ob unter Delphi 2009 die gleiche Routine werkelt..
Probiers doch einfach mal aus.

ryLIX 1. Mär 2010 23:03

Re: Hilfe bei Pointer auf Array of Byte
 
Ich hab eine passende Funktion hier im Forum gefunden.
Aber der Tip mit Inc hat mir auch shcon weiter geholfen. :hello:


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