Skip to main content
Weil einfach - produktiver ist

Der Daten Spezialist

Konvertieren Sie die Daten mühelos zwischen verschiedenen Formaten ohne Programmierkenntnisse dank Visual Designer. Effizient und super einfach.
Flowheater Download

Feldinhalte als ASCII + hexadezimal codier

Mehr
7 Jahre 7 Monate her #2797 von Sascha Heuser
Feldinhalte als ASCII + hexadezimal codier wurde erstellt von Sascha Heuser
Hallo zusammen,
ich habe das Vergnügen einen Matrixcode für eine Presseaussendung zu erstellen.
Erste Hürde die Felder zu separieren - erledigt
Zweite Hürde im Ergebnis muss das ein Feld als Hexadezimal ein anderes als ASCII codiert sein.
Dritte Hürde die hex muss mit Hochkommata und ASCII mit Anführungsstrichen eingeschlossen werden.

Ich sage Danke für eine hilfreiche Antwort B)
Sascha Heuser

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 7 Monate her #2800 von FlowHeater-Team
FlowHeater-Team antwortete auf Feldinhalte als ASCII + hexadezimal codier
Hallo Herr Heuser,

dazu benötigen Sie den .NET Script Heater und zwei kleine Skripte. Im Anhang finden Sie ein kleines Beispiel dazu. Um die Skripte zu verwenden müssen Sie jeweils einen (pro Skript) .NET Script Heater auf den Designer ziehen, per Doppelklick den Konfigurationsdialog öffnen und das vorhanden Skript mit diesem hier ersetzen. Das Skript erfordert einen Eingangsparameter mit der Zeichenfolgen die so ausgebeben werden soll!

Skript um Zeichenfolge als ASCII Werte auszugeben.
Code:
public object DoWork() { if (InValues.Length != 1) throw new Exception("Es wird ein Eingangsparameter erwartet!"); // Eingangsparameter holen string s = (string)InValues[0].GetString(); StringBuilder sb = new StringBuilder(); // ASCII Werte abrufen und im Byte Array speichern byte[] bytes = Encoding.ASCII.GetBytes(s); bool bFirst = true; // Alle ASCII Werte ausgeben foreach (byte b in bytes) { if (bFirst) bFirst = false; else sb.Append(" "); sb.Append("'"); sb.Append(b.ToString()); sb.Append("'"); } // Rückgabe der so gebildeten Zeichnfolge return sb.ToString(); }

Skript um Zeichenfolge als ASCII (HEX) Werte auszugeben
Code:
public object DoWork() { if (InValues.Length != 1) throw new Exception("Es wird ein Eingangsparameter erwartet!"); // Eingangsparameter holen string s = (string)InValues[0].GetString(); StringBuilder sb = new StringBuilder(); // ASCII Werte abrufen und im Byte Array speichern byte[] bytes = Encoding.ASCII.GetBytes(s); bool bFirst = true; // Alle ASCII Werte als HEX ausgeben foreach (byte b in bytes) { if (bFirst) bFirst = false; else sb.Append(" "); sb.Append("\""); sb.Append(b.ToString("X")); sb.Append("\""); } // Rückgabe der so gebildeten Zeichnfolge return sb.ToString(); }


Dateianhang:

Dateiname: ascii-hex-code.zip
Dateigröße:2 KB

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Anhänge:

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 7 Monate her #2803 von Sascha Heuser
Sascha Heuser antwortete auf Feldinhalte als ASCII + hexadezimal codier
Hallo Herr Stark,
das scheint tatsächlich die Lösung zu sein. Final fehlt noch die Freigabe vom Kunden bzw. der Post :-)
Vielen Dank für die schnelle Hilfe!!!!!

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 7 Monate her #2804 von Sascha Heuser
Sascha Heuser antwortete auf Feldinhalte als ASCII + hexadezimal codier
Hallo Herr Stark,
wir sind auf dem richtigen Weg.
Allerdings gibt es noch eine kleine Hürde. Es geht im Augenblick noch um die hex Ausgabe.
Die einzelnen Arrays sollen in die Hochkommata und nicht die einzelnen Dateninhalte.
zB. '19 20' statt '19' '20'
Wenn Sie da nochmal ein Auge drauf haben?
Vielen Dank,
Sascha Heuser

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 7 Monate her #2807 von FlowHeater-Team
FlowHeater-Team antwortete auf Feldinhalte als ASCII + hexadezimal codier
hier die angepassten Skripte

Skript um Zeichenfolge als ASCII Werte auszugeben
Code:
public object DoWork() { if (InValues.Length != 1) throw new Exception("Es wird ein Eingangsparameter erwartet!"); // Eingangsparameter holen string s = (string)InValues[0].GetString(); StringBuilder sb = new StringBuilder(); sb.Append("'"); // ASCII Werte abrufen und im Byte Array speichern byte[] bytes = Encoding.ASCII.GetBytes(s); bool bFirst = true; // Alle ASCII Werte ausgeben foreach (byte b in bytes) { if (bFirst) bFirst = false; else sb.Append(" "); sb.Append(b.ToString()); } sb.Append("'"); // Rückgabe der so gebildeten Zeichnfolge return sb.ToString(); }

Skript um Zeichenfolge als ASCII (HEX) Werte auszugeben
Code:
public object DoWork() { if (InValues.Length != 1) throw new Exception("Es wird ein Eingangsparameter erwartet!"); // Eingangsparameter holen string s = (string)InValues[0].GetString(); StringBuilder sb = new StringBuilder(); sb.Append("\""); // ASCII Werte abrufen und im Byte Array speichern byte[] bytes = Encoding.ASCII.GetBytes(s); bool bFirst = true; // Alle ASCII Werte als HEX ausgeben foreach (byte b in bytes) { if (bFirst) bFirst = false; else sb.Append(" "); sb.Append(b.ToString("X")); } sb.Append("\""); // Rückgabe der so gebildeten Zeichnfolge return sb.ToString(); }

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 7 Monate her - 7 Jahre 7 Monate her #2808 von Sascha Heuser
Sascha Heuser antwortete auf Feldinhalte als ASCII + hexadezimal codier
Hallo Herr Stark,
ich habe Ihnen ein paar Screenshots per Email geschickt.
Hoffe das ist ok so.
Viele Grüße
Sascha Heuser
Letzte Änderung: 7 Jahre 7 Monate her von Sascha Heuser.

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 7 Monate her #2809 von Sascha Heuser
Sascha Heuser antwortete auf Feldinhalte als ASCII + hexadezimal codier
Hallo Herr Stark,
die Ausgabe als ASCII können wir streichen.
Hier eine genauere Beschreibung der Aufgabe. Ziel ist ein DataMatrix Barcode für die Deutsche Post zu generieren.
Die Werte werden hexadezimal codiert benötigt.
Der erzeugte Code setzt sich aus verschiedenen Teilen zusammen.
Die statischen Elemente werden als x-Value (bereit hex codiert) zugesteuert die variablen Elemente ziehe ich direkt und insgesamt oder als substring aus einem Feld der Quelle.
Für diese Werte müsste auch die Umwandlung in Hexadezimal erfolgen.

Ich habe für jedes Byte vorgegeben was drin stehen soll und für jedes [Feld] eine vorgegebene Länge.
zum Beispiel:
in f1bisf3 [PostUnternehmen] Länge 3 "DEA" = 444541
in f102 bis f131 [Name1] Länge 30, "Deutsche Post AG" = 446575747363686520506f73742041470000000000000000000000000000 aufgefüllt (mit 00 oder 20) auf 30 Byte
Am Ende verbinde ich diese mit dem Append Adapter und gebe den Inhalt aus.
Wenn ich das unverständlich oder unvollständig beschreiben habe bitte Bescheid sagen :-)
Im Anhang finden Sie die Beschreibung der DPAG, hier ist ab Seite 8 der relevante Inhalt zu finden.
Dazu einen Screenshot des FlowHeater Projekts.
Hier fehlen noch die Scrips für die Werte aus dem Feld Datamatrix Code.
Danke und viele Grüße
Sascha Heuser
Anhänge:

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 7 Monate her #2812 von FlowHeater-Team
FlowHeater-Team antwortete auf Feldinhalte als ASCII + hexadezimal codier
Hallo Herr Heuser,

im Anhang finden Sie ein angepasstes Beispiel das das widerspiegelt was Sie im letzten Post geschrieben haben. Es werden einmal die einzelnen Zeichen (ASCII codiert) der Zeichenfolge „DEA“ hexadezimal formatiert ausgegeben sowie die Zeichenfolge „Deutsche Post AG“ ebenfalls in ASCII (HEX) auf 30 Bytes mit hex 0x00 aufgefüllt. Letzteres wird zusätzlich pro Byte mit einem Leerzeichen getrennt ausgegeben.

PS: Die 16 Seiten Doku habe ich mir nicht angesehen. Das kann und will ich hier im kostenlosen Support nicht leisten. Falls das nicht ist was Sie wollen/brauchen benötige ich für die weitere Lösungssuche, auf Basis des letzten Beispiels, eine genaue Beschreibung was Sie benötigen. Danke.

Dateianhang:

Dateiname: ascii-hex-code-3.zip
Dateigröße:3 KB

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Anhänge:

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 7 Monate her #2813 von Sascha Heuser
Sascha Heuser antwortete auf Feldinhalte als ASCII + hexadezimal codier
Hallo Herr Stark,
das ist definitiv eine Klasse Support Leistung die Sie hier bieten!
Aus dem letzten Beispiel konnte ich die allermeisten der Konvertierungen durchführen.
Mit fehlt jetzt nur noch das Script welches dezimal in hexadezimal wandelt.
Zum Beispiel eine Postleitzahl:
50672 dezimal als hex 00C5F0
77815 dezimal als hex 012FF7
die führende 0 würde ich dann ggf. wieder über den Format Adapter, rechtsbündig auffüllen.
Herzlichen Dank für Ihre Hilfe,
viele Grüße
Sascha Heuser

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 7 Monate her #2815 von Sascha Heuser
Sascha Heuser antwortete auf Feldinhalte als ASCII + hexadezimal codier
Hallo Herr Stark,
eben noch festgestellt, die Umlaute werden vom Script nicht korrekt in hex umgerechnet
Alles wird in 3F = ? codiert statt richtig:
Ä = c4, ä = e4, Ü = dc, ü = fc, Ö = d6, ö = f6, ß = df
dazu noch die richtige Umrechnung der Dezimalwerte wie zuvor geschrieben und wir sind am Ziel :-)
Danke und viele Grüße
Sascha Heuser

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 7 Monate her - 7 Jahre 7 Monate her #2816 von FlowHeater-Team
FlowHeater-Team antwortete auf Feldinhalte als ASCII + hexadezimal codier
Hallo Herr Heuser,

um Dezimalzahlen als eine HEX formatierte Zeichenkette auszugeben benötigen Sie unten stehendes Skript, im Anhang finden Sie ein kleines Beispiel (dezimal-nach-hex-konvertieren.zip) wie es angewendet wird.

Zu den Umlauten
Im Ursprünglichen DOS ASCII Zeichensatz gab es keine deutschen Umlaute :-) Daher wird hier bei der Umwandlung immer der gleiche HEX Wert ausgegeben. Wenn Umlaute berücksichtigt werden sollen müssen Sie in den zur Verfügung gestellten Skripten die Zeile
byte[] bytes = Encoding.ASCII.GetBytes(s);

austauschen mit
byte[] bytes = Encoding.GetEncoding(850).GetBytes(s);

Hiermit wird dann zur Umwandlung die für Deutschland mit Umlauten aufgebohrte Variante des ASCII Zeichensatzes (Codepage 850) verwendet.

Allerdings sind die von Ihnen aufgezeigten HEX Werte für die Umlaute keine ASCII Werte sondern deuten auf eine Windows ANSI Codepage hin. Hier sind zwar die meisten normalen Zeichen (Buchstaben) gleich, bei Umlauten gibt es aber Abweichungen (siehe weiteres Beispiel "ascii-ansi-vergleich.zip" im Anhang ). Wenn Sie dies benötigen müssen Sie die Zeile wie folgt austauschen und sollten das richtige Ergebnis haben.

byte[] bytes = Encoding.Default.GetBytes(s);


Hier finden Sie weitere Infos zur Umwandlung von ASCII Zeichensatz nach ANSI
MS DOS ASCII CSV zu Windows ANSI FlatFile konvertieren
Windows ANSI FlatFile zu MS DOS ASCII CSV konvertieren

Dateianhang:

Dateiname: ascii-ansi...eich.zip
Dateigröße:2 KB


Dateianhang:

Dateiname: dezimal-na...eren.zip
Dateigröße:2 KB

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Anhänge:
Letzte Änderung: 7 Jahre 7 Monate her von FlowHeater-Team.

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 7 Monate her #2817 von Sascha Heuser
Sascha Heuser antwortete auf Feldinhalte als ASCII + hexadezimal codier
Hallo Herr Stark,
damit komm ich zurecht. An sich darf jetzt nichts mehr passieren.
Herzlichen Dank und ein schönes Wochenende!
Sascha Heuser

Bitte Anmelden um der Konversation beizutreten.

Ladezeit der Seite: 0.399 Sekunden

FlowHeater - Der Daten Spezialist

Effiziente Datenintegration und Transformation mit FlowHeater - Ihre Lösung für nahtlosen Datentransfer.

Rechtliches

Support & Kontakt

Kontaktinformation

Telefon:
0951 / 99339792

E-Mail:
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.


Copyright © 2009-2024 by FlowHeater GmbH. Alle Rechte vorbehalten.