TIA Bytes in richtigen Text (String) umwandeln

gerdh

Level-2
Beiträge
103
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi !

Ich möchte eine Bytedarstellung (in arrays) in Text (String) umwandeln...
sprich wenn ich als Byte (Darstellung) AF habe, dann sollte als String auch AF rauskommen.....
Dazu hab ich noch keinen Ansatzpunkt gefunden, wie das gehen könnte.

Gruss Gerd
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Python:
FUNCTION "HexToStr" : String
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
HEX_VAL : Byte;
END_VAR

VAR_TEMP
Digit : Int;
C : Int;
t_HexToStr : String[2];
END_VAR


BEGIN

#Digit := BYTE_TO_INT(#HEX_VAL) / 16;
IF (#Digit <= 16) OR (#Digit >= 0) THEN
IF #Digit < 10 THEN
#C := #Digit + 48;
ELSE
#C := #Digit + 55;
END_IF;
#t_HexToStr:= INT_TO_CHAR(#C);
ELSE
#HexToStr := 'Invalid HEX character in string';
RETURN;
END_IF;

#Digit := BYTE_TO_INT(#HEX_VAL) - (#Digit * 16);
IF (#Digit <= 16) OR (#Digit >= 0) THEN
IF #Digit < 10 THEN
#C := #Digit + 48;
ELSE
#C := #Digit + 55;
END_IF;
#HexToStr := CONCAT(IN1:=#t_HexToStr, IN2:=INT_TO_CHAR(#C))  ;
ELSE
#HexToStr := 'Invalid HEX character in string';
RETURN;
END_IF;


END_FUNCTION

Von hier: https://support.industry.siemens.com/forum/at/en/posts/how-to-convert-hex-to-string/156522
Ungetestet von mir
 
...
sprich wenn ich als Byte (Darstellung) AF habe, dann sollte als String auch AF rauskommen.....
:unsure: Wenn Du als Byte AF hast, soll als String auch AF rauskommen?
Meinst Du damit, wenn das Byte hexadezimal dargestellt AF beinhaltet, dann sollen daraus zwei Bytes gezaubert werden, von denen das erste ASCII-A (also hex 41) und das zweite ASCII-F (also hex 46) enthält?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau wenn ich die Bytefolge 11223344 habe will ich als String eben 11223344
ich krieg aber ein Array mit 25 Bytes und daraus einen Array mit 25 Strings (a 2 zeichen)

Gruss Gerd
 
Chars_to_string konvertiert ja nicht die Hexadezimalziffern der Bytes nach ASCII, sondern kopiert die Bytes einfach nur in einen String. Das will der Fragesteller aber nicht, er weiß nur nicht, wie er das fachmännisch ausdrücken soll was er meint ;)
Wenn er die Hexadezimaldarstellung DW#16#11223344 hat (Bytefolge 16#11 16#22 16#33 16#44), dann soll daraus der String "11223344" werden (Bytefolge 16#31 16#31 16#32 16#32 16#33 16#33 16#34 16#34)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Chars_to_string konvertiert ja nicht die Hexadezimalziffern der Bytes nach ASCII, sondern kopiert die Bytes einfach nur in einen String. Das will der Fragesteller aber nicht, er weiß nur nicht, wie er das fachmännisch ausdrücken soll was er meint ;)
Wenn er die Hexadezimaldarstellung DW#16#11223344 hat (Bytefolge 16#11 16#22 16#33 16#44), dann soll daraus der String "11223344" werden (Header + Bytefolge 16#31 16#31 16#32 16#32 16#33 16#33 16#34 16#34)

Harald
FTFY :p
 
Für das gäbe es bei 1200er und 1500er bereits auch die Anweisung HTA:
Anhang anzeigen 66566
Anhang anzeigen 66567
Wobei diese Anleitung bei mir schon wieder dafür sorgt, dass sich mir die Fußnägel aufrollen und ich nervöses Augenzucken bekomme, weil es den nicht so erfahrenen Leuten da draußen wieder falsches Wissen vermittelt.
Ein WORD, BYTE, INT, usw. enthält keine hexadezimale Zahl, sondern eine bestimmte Anzahl von 0 und 1 und mehr nicht. Das einzige wo ich das noch im gewissen Rahmen gelten lassen kann ist bei einem String oder ARRAY of Char.
Ob man die Bitkombination 00011010 nun als 26Dez, 1AHex oder eben als 00011010 anzeigt ist, wie der Name schon sagt, eine Anzeigeneinstellung. Man kann nichts in eine hexadezimale Zahl konvertieren, das ist und bleibt Blödsinn. Man kann etwas in hexadezimaler Form darstellen. Darum konvertiert dieser Befehl auch eigentlich nichts, sondern stellt einen Speicherbereich in hexadezimaler Form als String oder WSTRING dar, das würde ich aber nicht konvertieren nennen.
 
Zuletzt bearbeitet:
HTA konvertiert ganz eindeutig, und zwar die hexadezimale Darstellung eines binären Wertes in ASCII-Zeichen. Das Ergebnis der Konvertierung belegt doppelt so viel Speicherplatz wie der Eingangswert.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
HTA konvertiert ganz eindeutig, und zwar die hexadezimale Darstellung eines binären Wertes in ASCII-Zeichen. Das Ergebnis der Konvertierung belegt doppelt so viel Speicherplatz wie der Eingangswert.

Harald
Hallo Harald,
dem möchte ich aus schon erwähnten Gründen erneut widersprechen. Er sorgt dafür, dass eine Ansammlung von 0 und 1, wie gesagt mit Ausnahme von ARRAY of Char vielleicht, als hexadezimale Zahl in einem STRING oder WSTRING abgelegt wird. Auch Befehle wie INT_TO_STRING oder so sind für mich genaugenommen keine Konvertierungsbefehle, sondern Sie stellen einen bestimmten Speicherbereich in einer bestimmten Form dar.
Man könnte mir jetzt Haarspalterei vorwerfen, aber meine Weigerung diese Befehle als Konvertierungsbefehle zu bezeichnen hat einen bestimmten Hintergrund.
Es ist, auch hier im Forum, öfters vorgekommen, dass jemand gefragt hat, mit welchem Befehl er sein BYTE oder WORD in eine hexadezimale Zahl konvertieren kann. Was aber tatsächlich gemeint war ist, dass, um bei obigem Beispiel zu bleiben, er oder sie oder es, z.B. bei einem Variablenwert, 26 angezeigt bekommt, aber stattdessen 1A angezeigt werden soll und das ist eben keine Konvertierung, sondern einfach eine andere Darstellungsweise.
 
Zuletzt bearbeitet:
Hallo Harald,
dem möchte ich aus schon erwähnten Gründen erneut widersprechen. Er sorgt dafür, dass eine Ansammlung von 0 und 1, wie gesagt mit Ausnahme von ARRAY of Char vielleicht, als hexadezimale Zahl in einem STRING oder WSTRING abgelegt wird. Auch Befehle wie INT_TO_STRING oder so sind für mich genaugenommen keine Konvertierungsbefehle, sondern Sie stellen einen bestimmten Speicherbereich in einer bestimmten Form dar.
Man könnte mir jetzt Haarspalterei vorwerfen, aber meine Weigerung diese Befehle als Konvertierungsbefehle zu bezeichnen hat einen bestimmten Hintergrund.
Es ist, auch hier im Forum, öfters vorgekommen, dass jemand gefragt hat, mit welchem Befehl er sein BYTE oder WORD in eine hexadezimale Zahl konvertieren kann. Was aber tatsächlich gemeint war ist, dass, um bei obigem Beispiel zu bleiben, er oder sie oder es, z.B. beim einem Variablenwert, 26 angezeigt bekommt, aber stattdessen 1A angezeigt werden soll und das ist eben keine Konvertierung, sondern einfach eine andere Darstellungsweise.
Du musst aber zugeben, dass der Typ des Eingangs nicht der selbe Typ wie am Ausgang ist.
Daher würde ich hier sehr wohl von einer Konvertierung sprechen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das finde ich ein spannendes Thema.
Ich sehe das so, wie @oliver.tonn

Aber vielleicht muss man auch erst einmal klären, auf was die Konvertierung bezogen ist.
Wenn man eine Datentyp- bzw. Anzeigedarstellungskonvertierung meint (bei der das Bitmuster erhalten bleibt), muss das auch klar kommuniziert werden. "Konvertierung" reicht da m.E. nicht. Es müsste "Typkonvertierung" o.ä. heißen.
Wenn sich das Bitmuster ändert (z.B. Dint => Real) könnte man von einer "Wertkonvertierung" sprechen.

Beides mal Konvertierung, einmal Anzeigekonvertierung und einmal Wertkonvertierung...

VG

MFreiberger
 
Wenn man eine Datentyp- bzw. Anzeigedarstellungskonvertierung meint (bei der das Bitmuster erhalten bleibt), muss das auch klar kommuniziert werden. "Konvertierung" reicht da m.E. nicht. Es müsste "Typkonvertierung" o.ä. heißen.
Wobei bei der Ablage in einen String oder WString das Bitmuster nicht erhalten bleibt, aber trotzdem finde ich nicht, dass es eine Konvertierung ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wobei bei der Ablage in einen String oder WString das Bitmuster nicht erhalten bleibt, aber trotzdem finde ich nicht, dass es eine Konvertierung ist.
Genau, konvertieren kann man ja eigentlich nur von einer Religion zur anderen ;)

@nicht nur Oliver
Mal ehrlich, wird jetzt alles ein wenig Wortklauberei oder?
 
Genau, konvertieren kann man ja eigentlich nur von einer Religion zur anderen ;)

@nicht nur Oliver
Mal ehrlich, wird jetzt alles ein wenig Wortklauberei oder?
Da kann ich nicht völlig widersprechen und ich gestehe gerne ein, dass das Kommando und ähnliche auch schon irgendwie etwas konvertieren, aber, wie ich schon erwähnte, leitet die Verwendung des Wortes Konvertierung viele in die Irre und Sie denken dann, um aus einer Dezimalzahl eine Hexadezimalzahl zu machen müsste man diese mit irgendeinem Befehl konvertieren und sie erkennen nicht, dass es nur eine andere Darstellungsform ist, was mir hier im Forum schon öfter begenet ist.
 
Zuletzt bearbeitet:
@nicht nur Oliver
Mal ehrlich, wird jetzt alles ein wenig Wortklauberei oder?
ja, aber:
[..], aber, wie ich schon erwähnte, leitet die Verwendung des Wortes Konvertierung viele in die Irre und Sie denken dann, um aus einer Dezimalzahl eine Hexadezimalzahl zu machen müsste man diese mit irgendeinem Befehl konvertieren und sie erkennen nicht, dass es nur eine andere Darstellungsform ist, was mir hier im Forum schon öfter begenet ist.

Wenn sich Jemand auskennt, sieht er es als Wortklauberei an. Aber derjenige, der es (neu) lernt, hat es leichter, wenn sehr scharf getrennt wird.

Ich hatte immer Schwierigkeiten mit den Begriffen "temporäre Variablen", "lokale Variablen", "statische Variablen". Das kam vor allem daher, weil viele, die es mir erklären wollten, selber die Begriffe nicht exakt verwendet hatten.
 
Zurück
Oben