TIA Wie konvertiert man ein Hex-Code-Array in ASCII-Strings?

Kelem

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

Ich bin neu hier und ich habe 3 Monate Erfahrung mit Tia.

Ich arbeite mit Tia V14 und einer S7-1500 CPU, ich habe ein DBvon typ Array von 32 Bytes hergestellt, wo der Hex-Code gespeichert wird. Jetzt möchte ich, diese Hex-Code in ASCII-Zeichenkette konvertieren, so dass ich einen Text als Ergebnis habe.

nur mit logischen Denksweise habe ich diese SCL - Funktion geschrieben (S. Anhang), aber es funktioniert nicht.

Wo ist das Problem in dieser Funktion?

Bin ich damit total falsch?

und wie kann ich es konvertieren?

Ich bin mir sicher, dass ihr mir helfen könnt.

Vielen Dank.
 

Anhänge

  • Funktion Umwandeln.PNG
    Funktion Umwandeln.PNG
    26,2 KB · Aufrufe: 115
Zuviel Werbung?
-> Hier kostenlos registrieren
Soweit so gut...

Die Wandlung erfolgt immer bis Byte 31 ... außer es ist ein "carriage return"

Soll jedoch mit CR abgebrochen werden dann mach ein If then mit nem EXIT das bricht die Vorschleife dann ab.

Edit:
Bin mir nicht sicher ob ein ConCat auf die selbe Variable geht.
 
Zuletzt bearbeitet:
Danke für die Antwort, ich habe schon darüber gedacht aber der HTA wandeln nur von 0...9 bzw A...F.
also es wird meine Meinung nach nicht reichen oder?
 
Soweit so gut...

Die Wandlung erfolgt immer bis Byte 31 ... außer es ist ein "carriage return"

Soll jedoch mit CR abgebrochen werden dann mach ein If then mit nem EXIT das bricht die Vorschleife dann ab.

Edit:
Bin mir nicht sicher ob ein ConCat auf die selbe Variable geht.

Hii, Danke für die Antwort
ja genau die if-Schleife wird mit CR abgebrochen. ich verstehe aber nicht gut was du meinst mit "if then mit einem EXIT".
Ich war mir auch nicht so sicher, aber ich nutze die Concat-Anweisung um ein Zeichenkette von die einzelne char zu bekommen. Hast du vielleicht ein Alternative? :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mich wundert das keiner gefragt hat - was genau NICHT geht?

was steht den im Byte Array - also die Aktualwerte?
evtl. eine Null - 0 - ?
Die 0 terminiert den String.... :)

wenn der Tag "Ergebnis" im Temp liegt, dann kann man denn auch als Char definieren und im Concat dann char_to_str verwenden - spart Speicher
 
Mich wundert das keiner gefragt hat ...
Na gut, dann traue ich mich jetzt mal, zu fragen.
Worum geht es hier bzw. was ist denn mit "Hex-Code" gemeint?
Bisher war für mich die HexadezimalDarstellung einer BinärZahl die Programmierer-freundliche Methode, die vielen Bits von rechts (LSB) nach links (MSB) in ViererGruppen einzuteilen, um dann jede VierBitGruppe platzsparend in eines der (ASCII-)Zeichen '0' ... '3' bzw. 'A' ... 'F' zu übersetzen.
Immer nach demselben Schema: 0000 entsprechend '0' bis 1001 entsprechend '9' und 1010 entsprechend 'A' bis 1111 entsprechend 'F'.
Was muss ich mir also darunter vorstellen, wenn irgendwo "Hex-Code" abgespeichert sein soll?
Binär-Code, den man alternativ auch platzsparend als Hex-Code darstellen kann (für schreib- und lesefaule Programmierer ;o) oder ist Binär-Code gemeint, der bereits für die Ausgabe z.B. auf Drucker oder Bildschirm "aufbereitet" ist?

was steht den im Byte Array - also die Aktualwerte?
evtl. eine Null - 0 - ?
Die 0 terminiert den String....
Wenn die Quelle aus Bytes besteht, die als "Hex-Code" ausgegeben werden sollen, also z.B. 00 und diese 2 Nullen in ASCII gewandelt werden, dann werden 2 Bytes erzeugt, die je die 8 Bits 0011000 (bzw. 30 in der Hex-Darstellung) enthalten.
Im String steht dann als Ergebnis kein NullByte und wird auch nicht als EndeZeichen (miss-)interpretiert.
Und die Null im QuellByte ist hier, wenn ich es richtig verstanden habe, nicht Bestandteil eines Strings.

Gruss, Heinileini
 
im Screenshot wird von Byte nach Char gewandelt, damit fällt ja die von dir beschriebene Variante mit der nibble weisen Konvertierung erst mal raus, wäre aber mitunter der bessere Weg um gerade die Terminierung durch 16#0 zu umgehen. :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Na gut, dann traue ich mich jetzt mal, zu fragen.
Worum geht es hier bzw. was ist denn mit "Hex-Code" gemeint?
Bisher war für mich die HexadezimalDarstellung einer BinärZahl die Programmierer-freundliche Methode, die vielen Bits von rechts (LSB) nach links (MSB) in ViererGruppen einzuteilen, um dann jede VierBitGruppe platzsparend in eines der (ASCII-)Zeichen '0' ... '3' bzw. 'A' ... 'F' zu übersetzen.
Immer nach demselben Schema: 0000 entsprechend '0' bis 1001 entsprechend '9' und 1010 entsprechend 'A' bis 1111 entsprechend 'F'.
Was muss ich mir also darunter vorstellen, wenn irgendwo "Hex-Code" abgespeichert sein soll?
Binär-Code, den man alternativ auch platzsparend als Hex-Code darstellen kann (für schreib- und lesefaule Programmierer ;o) oder ist Binär-Code gemeint, der bereits für die Ausgabe z.B. auf Drucker oder Bildschirm "aufbereitet" ist?


Wenn die Quelle aus Bytes besteht, die als "Hex-Code" ausgegeben werden sollen, also z.B. 00 und diese 2 Nullen in ASCII gewandelt werden, dann werden 2 Bytes erzeugt, die je die 8 Bits 0011000 (bzw. 30 in der Hex-Darstellung) enthalten.
Im String steht dann als Ergebnis kein NullByte und wird auch nicht als EndeZeichen (miss-)interpretiert.
Und die Null im QuellByte ist hier, wenn ich es richtig verstanden habe, nicht Bestandteil eines Strings.

Gruss, Heinileini
hii,
ok du hast die Frage nicht verstanden... vielleicht weil du nichts von der ASCII Hex-code wusstest :). Die folgende Seite hilft dir (es ist eine Tabelle).

https://www.torsten-horn.de/techdocs/ascii.htm

Gruss, K.
 
Die Ascii Tabelle ist ein alter Hut - ich denke die kennt Heinilein auch :)
Zeigt viel mehr das man es auf zig wegen machen kann....


zeig doch lieber mal was in deinem Array steht.
Was genau geht nicht - also was geht rein, und was erwartest du das zurück kommt und was wird tatsächlich zurück geliefert?

DBs und SCL Bausteine kann man auch als quellen exportieren - dann müssen es die anderen nicht abtippen um es zu testen ;-)
 
Hallo Kelem,

ich würde mir das ARRAY vor der Wandlung temporär zusammenstellen, also ohne die ersten Zeichen und ohne das "CR". Dann würde ich es mit "CHARS_TO_STRG" wandeln. "CHARS_TO_STRG" wandelt ein "ARRAY of CHAR" oder auch ein "ARRAY of BYTE" zu einem STRING. Natürlich kannst du den STRING auch nach der Wandlung bearbeiten, ist vielleicht auch verständlicher.

Gruß zum sonnigsten aller Sonntage, Onkel Dagobert
 
Zurück
Oben