| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: ASCII-Zeichen (3227 mal gelesen)
|
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 19. Aug. 2006 10:44 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich muss folgendes Problem lösen. Beispiel: mit (CHR 65) bekomme ich ein "A" Wie bekomme ich in Lisp (wenn möglich ohne VLX) aus dem "A" ein 65? Danke vorab für eine Lösung. Entschuldigung für meine Frage, der Befehl ist "ASCII". Gruß Theodor Schönwald
[Diese Nachricht wurde von Theodor Schoenwald am 19. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 19. Aug. 2006 11:08 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
|
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 19. Aug. 2006 12:35 <-- editieren / zitieren --> Unities abgeben:
Danke Udo! Nun will ich auch mitteilen für was ich das brauche. Ich muss den ASCII-Wert von veschiedenen Zeichen auslesen 128 dazu zählen und dann diese Zeichen ausgeben. Diesen weg muss ich beim Einlesen auch umgekehrt -128 machen. Nur bei der "0" muss ich "0" ausgeben. Warum brauch ich es? Die Firma NUM verschlüsselt so ihren CNC-Code und verkauft dann den Kunden ein Programm, das diese Daten wieder entschlüsselt. Das funktioniert in etwa so wie Geld drucken. Gruß Theodor
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Niggemann Mitglied
Beiträge: 165 Registriert: 31.10.2003 Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010
|
erstellt am: 19. Aug. 2006 16:03 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
pass aber auf ob es sich um einen DOS oder Windows Zeichensatz handelt und wandel die Ascii Zeichen nicht um, das heist hast du dein (ascii "A") sprich deine 65 so behalte diese bei und gib sie mit (chr 65)und deinem Rechenwert wieder zurück. Gruß Niggemann
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 19. Aug. 2006 19:42 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
@Niggemann ASCII (American Standard Code for Information Interchange) benutzt nur die ersten 7 bits und umfaßt daher 128 Zeichen. Die Z u o rdnung der Werte von 0 bis 127 ist bei allen ASCII basierten Codetabellen gleich. Allerdings enthält der ASCII-Zeichensatz keine nationalen Sonderzeichen. Diese Zeichen liegen im Codebereich zwischen 128 und 255, für den etliche in Zeichenvorrat und -belegung völlig unterschiedliche Codepages existieren. Da die vorliegenden CNC Daten aber nur ASCII Zeichen benutzt werden, ist das irrelevant. P.S zuordnung wurde immer ausge**** ------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 19. Aug. 2006 23:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Udo, hallo Niggemann, dem Kunde wird vorgemacht, dass es Binärcode ist und 300 Euro für ein Umwandlungsprogramm verlangt. Mit einer einfachen Bat-Datei und dem Programm "CHG", kann ich, mit folgenden Beispiel Zeilen: ... CHG -i %1 -s [193] -r [65] CHG -i %1 -s [194] -r [66] CHG -i %1 -s [195] -r [67] CHG -i %1 -s [196] -r [68] ..., die Dateien lesbar machen. Das funktioniert einwandfrei. %1 ist der Dateiname, -s suchen, -r ersetzen. Mit eine zweiten Batdatei kann ich den Weg auch rückwärts gehen. Das Programm CHG ist nicht von mir, darin steht: "CHG is Copyright (C) 1988 John Kruper. All Rights Reserved." sonst könnte ich die Stapeldatei als Tool bereistellen. Nun habe ich mir 2 Aufgaben vorgenommen: a) Das gleich mit Lisp zu machen und b) Die Ausgabe der Zeichen für CNC-Daten, wenn sie für eine NUM-Steuerung sind, mit plus 128 auszugeben. Und beim Einlesen von Zeichen -128.
Wenn etwas daraus wird, werde ich das Tool bei meinen kostelosen CNC-Tools einbinden. Gruß Theodor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Niggemann Mitglied
Beiträge: 165 Registriert: 31.10.2003 Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010
|
erstellt am: 20. Aug. 2006 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
@Udo das mit dem Asciicode mag ja stimmen, ich wollte Theodor nur auf folgendes hinweisen: Im Edit.com (aus win98 codepage 437) schreibe ich "§" (lt. Asciicode 21) dieses Zeichen kopiere ich mir in die Zwischeablage. Nun prüfe ich in Lisp mit (ascii "(Strg v)") und bekomme 21 als Rückgabe. Schreibe ich im Visual lisp das Zeichen "§" und prüfe dieses bekomme ich als Rückgabe 167. Bei diesem Zeichen ist es mir halt Aufgefallen. @Theodor ich kenne leider keine CNC-Daten aber so wie es aussieht müste es ja morgen in deinen CNC-Tools stehen Gruß Niggemann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 20. Aug. 2006 13:21 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
|
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 20. Aug. 2006 17:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Niggemann, Du hast nicht ganz recht mit morgen, dank Muster-Beispiele von Axel heute schon. Hier ist die Rohfassung: ;;-------------------------------------------- (defun C:N_E (/) ;; Liste aus String von Axel (defun STR2LST (STR / LS I) (setq I 1) (repeat (strlen STR) (if (= (substr STR I 1) "0") (setq LS (cons (substr STR I 1) LS)) ;; Mit - 128 wird entschlüsselt mit + 128 verschlüsselt (setq LS (cons (chr (- (ascii (substr STR I 1))128)) LS)) ) (setq I (1+ I)) ) (reverse LS) ) ;; Liste zu String, TZ = Trennzeichen, auch von Axel (defun LST2STR (LST TZ / LEN TMP STR) (setq LEN (length LST) STR "" ) (foreach TMP LST (setq STR (strcat STR TMP TZ)) ) (if (/= TZ "") (setq LEN (strlen STR) STR (substr STR 1 (1- LEN)) ) ) STR ) ;; NC-Datei öffnen und auswerten (setq DATA_FILE (open (getfiled "Auswahl einer NC-Datei" "" "NUM" 4) "r")) (prompt "\n") (while (setq TXT (read-line DATA_FILE)) ; DATA_FILE lesen ;; Zum testen gebe ich die Daten im Textfenster von ACAD aus. (princ (strcat (LST2STR (STR2LST TXT) "") "\n")) ) (princ) ) (princ) ;;----------------------------------------------------------- Viele Grüße Theodor [Diese Nachricht wurde von Theodor Schoenwald am 20. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 20. Aug. 2006 18:40 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
nur mal ein paar Gedanken zu STR2LST : (mapcar 'chr(mapcar '(lambda(x)(+ 128 x)) (vl-string->list "qsdq"))) und zu LST2STR : (apply 'strcat (mapcar '(lambda(x)(strcat X TZ))LISTE)) oder (vl-string-right-trim TZ (apply 'strcat (mapcar '(lambda(x)(strcat X TZ))LISTE))) ohne Anspruch auf Vollständigkeit... .. macht sich aber vielleicht bei langen Listen besser (und schneller) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
andi2050 Mitglied
Beiträge: 107 Registriert: 11.03.2003
|
erstellt am: 20. Aug. 2006 19:20 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Hallo ! Mit der Boolschen-Funktion XOR kannst Du Verschlüsseln/Entschlüsseln mit der selben Funktion erledigen. - durch hinzuzählen von 128 setzt Du das 7.Bit des ASCII-Werts - durch abziehen von 128 löscht Du das 7.Bit des ASCII-Werts Dies läßt sich auch mit 'XOR 128' erledigen. In LISP: (boole 6 Integer 128) - die 6 steht für 'XOR-Operation' -> siehe LISP-Hilfe Wenn man auf das Ergebnis nochmal 'XOR 128' loslässt erhält man wieder den Ausgangswert. Mit XOR 128 wird praktisch das 7. Bit invertiert. Damit lassen sich auch ASCII-Zeichen größer als 128 verschlüsseln bzw. entschlüsseln ! (crypt "Test0") -> "Ôåóô0" (crypt (crypt "Test0")) -> "Test0" Code:
;;; Invertiert Bit7 der einzelnen Zeichen im String ;;; "0" bleibt unverändert (defun crypt (string / n newstring char) (setq n 1 newstring "" ) (repeat (strlen string) (setq char (substr string n 1) newstring (strcat newstring (if (= "0" char) "0" ;; ------- Verschlüsseln-------- (chr (boole 6 (ascii char) 128)) ;;------------------------------ ) ) n (1+ n) ) ) newstring )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 20. Aug. 2006 21:58 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, Hallo Andi, @ Thomas, da ich auch ICAD berücksichtigen muss, kann ich VLX nicht anwenden. @ Dein Vorschlag werde ich gleich ausprobieren, an den Weg hatte ich nicht gedacht. Danke! Gruß Theodor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 20. Aug. 2006 23:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Andy, Dein Vorschlag hat das Programm verkürzt und vereinfacht. Es war bei den verschlüsselten Dateien noch das Zeichen 137 zwischen den Wörtern und am Zeilenenden, das minus 128 ist 9 und das kann man beim CNC-Code nicht brauchen. Dazu kam noch dass 137 mehrmals hintereinader kam und dann wieder nur einmal. Diese Zeichen habe ich jetzt durch Leerzeichen ersetzt. Mit Dialogabfrage ob Ver- oder entschlüsseln und listen der einzelnen Zeilen nach dem Entschlüsseln kann ich das Programm bei meinen Tools zur Verfügung stellen. Noch mal Danke an alle "Mitwirkenden". Guß Theodor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 21. Aug. 2006 07:45 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
die vl -Funktionen haben nichts mit vlax oder activX zu tun... es sind -sagenwirmal- einfach interne Lispmakros ... ob die in ICAD implementiert sind ?? -> weißt du ja besser ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 21. Aug. 2006 09:46 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 21. Aug. 2006 09:57 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Offtopic: Wie wäre es .. schreib dir doch eine entsprechende Lispbibo, die sowas wie vl-string->list mit eigenen gleichlautenden Funktionen nachbildet. Ich seh da bloß das Zeitproblem ... wär vielleicht ein gutes "Foren-Project" .. jeder nimmt sich 5 Funcs vor.. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
andi2050 Mitglied
Beiträge: 107 Registriert: 11.03.2003
|
erstellt am: 21. Aug. 2006 19:28 <-- editieren / zitieren --> Unities abgeben: Nur für Theodor Schoenwald
Zu Offtopic: In der StdLib von Reini Urban sind die meisten vl-... Funktionen in 'normalen' LISP nachgebildet. Nur zur Info... Leider ist die Library recht groß und in sich verschachtelt. Ist mir persönlich etwas unsympatisch, meine Meinung. Grüße Andi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 22. Aug. 2006 18:51 <-- editieren / zitieren --> Unities abgeben:
Hallo, so wie ich es sehe, ist es ganz einfach eine Fleißarbeit. Man muss beide Dateien mit einem Hexeditor vergleichen, um zu sehen was mit was ersetzt werden muss. Wenn Du dann das Code-Beispiel von Andy etwas umbaust, hast Du die Lösung. Beim zweiten hinsehen, sieht es so aus, als ob bei den Zeichen nicht ein Zeichen durch ein anderes ersetzt wurde. Dann bleibt nur das Umwandlungsprogramm mit Lisp, oder Menü (Icon) aufzurufen. Dann merkt man von DOS nicht viel. Gruß Theodor
[Diese Nachricht wurde von Theodor Schoenwald am 22. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |