Array of Byte to String

Licht9885

Level-2
Beiträge
351
Reaktionspunkte
18
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin zusammen,

ich habe hier eine Anlage stehen die mittels Profibus Kommunikation eine Seriennummer als Array of Byte bekommt diese Seriennummer besteht aus Zahlen und Buchstaben die in diesem Array Byteweise kodiert sind. Die Übergebene Struktur ist ein Array [0..31] of Byte und muss zur weiteren Bearbeitung in ein String gewandelt werden. Meine Frage daher lautet wie kann ich dieses Array in ein String umwandeln?

Über Hinweise für Lösungswege oder evtl. verweise auf existente Bausteine währe ich dankbar. Die Suche hat leider bisher nicht ganz so viel brauchbares ergeben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Sebastian,

in den Bytes sind das schon ASCII-Zeichen (also eigentlich CHAR)? Hast Du mal ein Beispiel, was in den Bytes drin steht (die Werte am besten hexadezimal)?
Sind es immer 32 Zeichen oder gibt es eine zusätzliche Information über die Länge des Inhalts?

Ein String unterscheidet sich von einem Byte-Array im Grunde nur dadurch, daß hinter dem letzten Zeichen noch ein Byte mit dem Inhalt 0 (16#00) liegt, damit die Länge des Strings dynamisch sein kann und erkennbar wird. Dein Array ist immer 32 Bytes lang, egal wie viele Bytes tatsächlich Daten enthalten.

Du könntest einfach mit MEMCPY das Array auf ein Zwischen-Array [0..32] of Byte umkopieren und eine 0 in das Byte Zwischen-Array[32] schreiben und dann das Zwischen-Array mit MEMCPY in Deinen Zielstring kopieren. PS: oder wie oliver.tonn schreibt, nur einmal kopieren: gleich in einen String der schon auf die Länge 32 initialisiert ist.

Harald
 
Zuletzt bearbeitet:
Hallo und Danke für die Antworten die seriennummer sieht später folgend aus

Datum: 20170920 Kundenblock: xxxx Laufende Nummer: xxxx also im Endeffekt als zusammenhängender String


20170920CH020123
 
die seriennummer sieht später folgend aus

Datum: 20170920 Kundenblock: xxxx Laufende Nummer: xxxx also im Endeffekt als zusammenhängender String


20170920CH020123
Sind es immer 32 Zeichen oder gibt es eine zusätzliche Information über die Länge des Inhalts?
@Licht9885
Du könntest diese Frage noch beantworten, weil danach richtet sich, wo im Zielstring das 0-Byte plaziert werden muß.

Harald
 
Und dann noch die Frage nach der Plattform. In TwinCAT gäbe es z.B. die Utility-Library.
Da gibt es den ein oder anderen Baustein. Ich glaube der folgende macht genau das was du brauchst. Du muesstest nur dein Byte-Array in ein groesseres Array umkopieren (ARRAY [0..255] OF BYTE:wink:
https://infosys.beckhoff.com/index.p...string.htm&id=

Moin Danke an alle nochmal für die Antworten,

Die Plattform ist TwinCat 3

und nochmals eine neue Frage wenn ich jetzt einzelne Stellen in diesem Array bearbeiten will z.B den Tag ein Hochzählen oder die Laufende Nummern ein Hochzählen möchte, wie kann das funktionieren. da ich leider nicht oft mit Strings Arbeite bzw. diese Verändern muss, tue ich mich aktuell ein bisschen Schwer damit.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du holst Dir den Bereich mit (Je nach Position) LEFT, RIGHT oder MID aus dem String raus, wandelst ihn in eine Zahl (STRING_TO...), machst damit was, wandelst Ihn wieder in einen String und schiebst Ihn mit REPLACE wieder in den String. Beim Tag musst Du natürlich wegen "Überlauf" aufpassen, hier holst Du dir vielleicht am einfachsten das komplette Datum und fügst noch "." (Oder welches Trennzeichen bei TC das Datum hat) ein und wandelst das dann in ein Datum um und rechnest damit. Bei der laufenden Nummer könntest Du das vermutlich sogar in eine (Seeeeeeeehr lange) Zeile packen, die allerdings dann vermutlich keiner mehr versteht.
 
Zuletzt bearbeitet:
Hallo Sebastian,
was ich noch vergessen habe sind die führenden Nullen. Wenn Du von einer Zahl etwas abziehst kann sie ja weniger Stellen haben und dann würde das Einfügen mit REPLACE schief gehen. Hier müsstest Du den Bereich im Zielstring entweder mit Nullen vor dem Einfügen füllen oder Du nutzt den FB "FB_FormatString".
 
Zurück
Oben