Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi TIdBytes lesbar in INI speichern und wieder auslesen (https://www.delphipraxis.net/211885-tidbytes-lesbar-ini-speichern-und-wieder-auslesen.html)

fisipjm 16. Nov 2022 16:39

TIdBytes lesbar in INI speichern und wieder auslesen
 
hi,

irgendwie stehe ich mal wieder so richtig auf dem Schlauch.
Ich mache aktuell eine kleine Anwendung, um eine Kamera dazu zu bewegen, ihre vordefinierten Presets anzufahren.

Mein Code dafür schaut grob so aus

Delphi-Quellcode:
class procedure TPresets.preset1;
var
  MessageToSend: Tidbytes;
begin
  setlength(MessageToSend, 7);
  MessageToSend[0] := $81;
  MessageToSend[1] := $01;
  MessageToSend[2] := $04;
  MessageToSend[3] := $3F;
  MessageToSend[4] := $02;
  MessageToSend[5] := $01;
  MessageToSend[6] := $FF;

  with TIniFile.Create(ParamStr(0).Replace('.exe', '.conf')) do
  begin
    TIdUDPClient.Create(nil).SendBuffer(IP, PORT, MessageToSend);
  end;
end;
Ich versuche jetzt die Bytes in eine INI zu speichern. Das geht auch ganz gut damit:

Delphi-Quellcode:
class function TPresets.ByteArrayToString(byteArray: Tidbytes): string;
var
  i: Integer;
begin
  result := '';
  if byteArray <> nil then
  begin
    result := IntToHex(byteArray[0], 2);
    for i := 1 to High(byteArray) do
      result := result + '-' + IntToHex(byteArray[i], 2);
  end;
end;
Dann bekomme ich sowas wie:

Code:
81-01-04-3F-02-01-FF

Wie bekomme ich das jetzt wieder zurück in das TIdBytes gelesen. Ich hab schon alles Mögliche durch, aber steh glaube ich mega auf dem Schlauch.

himitsu 16. Nov 2022 16:45

AW: TIdBytes lesbar in INI speichern und wieder auslesen
 
Split auf die '-' und dann mit
Delphi-Quellcode:
StrToInt('$' + 'FF')

oder das Minus weglassen und rückzu alle 2 Chars splitten

oder, wenn man es dann schon "zusammen" hat,
einfach gemeinsam mit Delphi-Referenz durchsuchenBinToHex und Delphi-Referenz durchsuchenHexToBin in/von einen String
oder "modernere" Streaming-Klassen ala TNetEncoding.Base64.EncodeBytesToString
oder ...




Und an gewisse neuere Features kann man sich auch gewöhnen.
Delphi-Quellcode:
MessageToSend := [$81, $01, $04, $3F, $02, $01, $FF];


PS: Ich würde dir mal ein
Delphi-Quellcode:
ReportMemoryLeaksOnShutdown := True;
anraten, aber dann nicht erschrecken, falls das "grob" nicht zu viel weg ließ.

fisipjm 16. Nov 2022 17:58

AW: TIdBytes lesbar in INI speichern und wieder auslesen
 
Hi Himitsu,

Ich werde deinen Vorschlag Mal versuchen umzusetzen.
Der Code war nur Quick & Realy Dirty reingehauen um zu sehen ob es überhaupt funktionieren würde. In der Endfassung wird das alles hübsch mit try finallys instanziert oder gleich in ein Interface gepackt. Aber danke für den Hinweis :)

haentschman 17. Nov 2022 05:23

AW: TIdBytes lesbar in INI speichern und wieder auslesen
 
Moin...8-)
Zitat:

In der Endfassung wird das alles hübsch mit try finallys instanziert oder gleich in ein Interface gepackt
...und hoffentlich ohne das WITH. :thumb:

fisipjm 17. Nov 2022 11:05

AW: TIdBytes lesbar in INI speichern und wieder auslesen
 
Zitat:

Zitat von haentschman (Beitrag 1514887)
Moin...8-)
Zitat:

In der Endfassung wird das alles hübsch mit try finallys instanziert oder gleich in ein Interface gepackt
...und hoffentlich ohne das WITH. :thumb:

Na klar, wer nutzt schon WITH :lol::oops:


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