AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Umkonvertieren von hex Daten und in Variablen speichern.
Thema durchsuchen
Ansicht
Themen-Optionen

Umkonvertieren von hex Daten und in Variablen speichern.

Ein Thema von Graw · begonnen am 18. Aug 2023 · letzter Beitrag vom 24. Aug 2023
Antwort Antwort
Graw

Registriert seit: 26. Apr 2017
77 Beiträge
 
Delphi 11 Alexandria
 
#1

Umkonvertieren von hex Daten und in Variablen speichern.

  Alt 18. Aug 2023, 10:55
Hallo,

ich bekomme über eine serielle Schnittstelle 8 Byte und muss diese umkonvertieren und weiterverarbeiten.
Hier hänge ich nun leider fest.

Beispiel:

Folgendes bekomme ich über die serielle Schnittstelle:
0x55 0xAA 0x01 0x82 0x85 0x13 0x1A 0xF0

Folgende Daten sind enthalten:
Header: 0x55 0xAA
Kanal: 0x01
Befehl: 0x82
Wert inklusive Status: 0x85 0x13 0x1A
Checksumme: 0xF0

In der Prozedur OnRxChar würde ich gerne überprüfen ob der Header passend ist, den Kanal in einer Variable einlesen (0 bis 128) und der Wert inklusive Status muss in zwei Variablen.
0x85 0x13 0x1A ergibt: 0xA1385 = 660357 , Status: 0x10

Ich stehe bei dem umkonvertieren und passend ausschneiden auf dem Schlauch.

Könnt ihr mir da helfen

Vielen Dank.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

AW: Umkonvertieren von hex Daten und in Variablen speichern.

  Alt 18. Aug 2023, 12:54
ReplaceStr und alle '0x' entfernen, sowie alle Leerzeichen,
dann Delphi-Referenz durchsuchenHexToBin, z.B. in ein TBytes (oder einen AnsiString, RawByteString, AnsiChar-Array, Byte-Array, ...),
und dann vielleicht TEncoding.ANSI.GetString oder Dergleichen.

Ich glaub es gab irgendwo auch ein Stream-Klasse für Hexadezimal ... da müsste mal wer die Hilfe fragen
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von arcticwolf
arcticwolf

Registriert seit: 3. Aug 2021
Ort: Erfurt
41 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Umkonvertieren von hex Daten und in Variablen speichern.

  Alt 18. Aug 2023, 14:00
Ich würde das mit einem Record lösen in welches die Daten von der seriellen Schnittstelle geschrieben oder kopiert werden.

Delphi-Quellcode:
program SerialData;

{$APPTYPE CONSOLE}

uses
  System.SysUtils;

Const Data : Array [0..7] of Byte = ($55, $AA, $01, $82, $85, $13, $1A, $F0);

Type tMyRec = Record
     private
       Header : Word;
       Kanal : Byte;
       Befehl : Byte;
       Data : Array [1..4] of Byte;
     public
       Function Wert : Integer;
       Function Status : Byte;
     End;

Var MyRec : tMyRec;

function tMyRec.Status: Byte;
begin
  Result := (Data[3] div 16) shl 4;
end;

function tMyRec.Wert: Integer;
Var Value : Word;
begin
  Result := ((Data[3] mod 16) shl 16)
          + (Data[2] shl 8)
          + Data[1];
end;

begin
  Move(Data[0], MyRec, 8);
  Writeln('Header : ',MyRec.Header:6,' = $',MyRec.Header.ToHexString);
  Writeln('Kanal : ',MyRec.Kanal:6 ,' = $',MyRec.Kanal.ToHexString);
  Writeln('Befehl : ',MyRec.Befehl:6,' = $',MyRec.Befehl.ToHexString);
  Writeln('Status : ',MyRec.Status:6,' = $',MyRec.Status.ToHexString);
  Writeln('Wert : ',MyRec.Wert:6 ,' = $',MyRec.Wert.ToHexString);
  Readln;
end.
Das Ergebnis wäre dann wie folgt:

Code:
Header : 43605 = $AA55
Kanal :     1 = $01
Befehl :   130 = $82
Status :    16 = $10
Wert  : 660357 = $000A1385
Wolfgang
coding is an art - code for people not for machines
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Umkonvertieren von hex Daten und in Variablen speichern.

  Alt 19. Aug 2023, 14:33
Hey, tolle Lösung !!!
kann man hier im Forum nicht irgendwie die Threads zu Themen im Benutzerbereich speichern,
um ggf. später zurückgreifen zu können ?
wäre auch ein tolles Features für dieses Board.

Gruß, paule32
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Umkonvertieren von hex Daten und in Variablen speichern.

  Alt 21. Aug 2023, 09:21
packed? Alignment?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

AW: Umkonvertieren von hex Daten und in Variablen speichern.

  Alt 21. Aug 2023, 11:43
Gut, in diesem Fall ändert ein packed Record nichts, da es quai schon Packed ist, weil "Byte" bereits an der kleinst möglichen Grenze ausgerichtet wurde.

Aber vor allem für neue Delphi-Upgrades oder einen Umstieg auf Win64 oder eine andere Platform,
ist das für "statische" Daten immer angebracht, damit nicht durch ein geändertes Alignment dieses Record geändert und somit nicht mehr zu den Daten passen könnte.

Delphi-Quellcode:
type
  TMyRec = packed record
    ...
  end;
Alles, was feste, sowie. externe Strukturen referenziert, sollte besser immer fest/statisch/unveränderlich Deklariert werden,
außer dort wurde explizit etwas dynamisch definiert,
also nicht nur Alignemt, sondern auch Integer (16, 32, 64 Bit), Char (ANSI oder Unicode) usw.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Graw

Registriert seit: 26. Apr 2017
77 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Umkonvertieren von hex Daten und in Variablen speichern.

  Alt 24. Aug 2023, 14:40
Vielen Dank, damit kann ich super arbeiten.
  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 12:44 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