Wie übertrage ich serielle Daten mit einem einzigen Hexadezimalwert in PuTTY mit einem Alt-Code?

31069
Josh

Ich versuche, einen bestimmten Hexadezimalwert mit PuTTY über einen seriellen COM-Port zu senden. Insbesondere möchte ich die Hex-Codes 9C, B6, FC und 8B senden. Ich habe die AltCodes für diese nachgeschlagen und sie sind 156, 182, 252 und 139.

Immer wenn ich die AltCodes eingebe, wird ein vorangegangener Hex-Wert von C2 vor 9C, B6 und 8B gesendet, so dass die gesendeten Werte C2 9C, ​​C2 B6 und C2 8B sind. Der Wert für FC wird in C3 FC geändert.

Warum werden diese Werte vor dem Hex-Wert platziert und warum wird FC vollständig geändert? Es scheint mir, als ob es ein Problem gibt, den AltCode intern in Hex umzuwandeln . Gibt es eine Möglichkeit, Hex-Werte direkt einzugeben, ohne AltCodes in PuTTY zu verwenden?

1
Wenn Sie wissen, dass der vorangegangene Hex-Wert immer gesendet wird, passen Sie Ihren Code entsprechend an. Außerdem senden Sie nicht den "alt" -Code, sondern die ganzzahlige Darstellung dieser Werte. Die Verwendung des richtigen Begriffs ist von entscheidender Bedeutung. Ramhound vor 10 Jahren 0

1 Antwort auf die Frage

4
grawity

Was Sie sehen, ist nur eine gewöhnliche Textzeichensatzkonvertierung.

Was PuTTY betrifft, tippen (und lesen) Sie Text und nicht Binärdaten. Daher muss der Text in Byte in dem konfigurierten Zeichensatz konvertiert werden, bevor er über das Kabel gesendet wird.

Wenn Sie also Alt+ 1 8 2eingeben, erhält PuTTY das entsprechende Zeichen vom alten "OEM" -Zeichensatz, für den das System konfiguriert ist. (Die Eingabe von Alt+ 0 1 8 2würde aus dem alten Zeichensatz "ANSI" (Windows-125x) wählen.) In diesem Fall handelt es sich bei dem Zeichen um eine Pfeile.

Jetzt muss PuTTY dieses Zeichen in Bytes konvertieren. Frühere PuTTY-Versionen würden standardmäßig den gleichen alten Windows-125x-Zeichensatz verwenden, der vom Betriebssystem selbst verwendet wird, z. B. Windows-1257. Die Konvertierung war also fast direkt 1 8 2, das Byte 182 wurde dezimal (0xB6-Hex) empfangen.

Da PuTTY jedoch normalerweise eine Verbindung zu Linux- oder BSD-Servern herstellt, von denen die überwiegende Mehrheit standardmäßig auf UTF-8 umgestellt wurde, wurde die neueste Version von PuTTY standardmäßig auch mit UTF-8 gestartet. UTF-8 ist eine Kodierung des Unicode-Mega-Zeichensatzes mit der Position U + 00B6, und es ist meist Zufall, dass UTF-8 diesen Wert als Bytes kodiert C2 B6:

  • U+00B60000|0000 10|110110[110]00010 [10]110110C2 B6

  • U+00FC0000|0000 11|111100[110]00011 [10]111100C3 BC

  • U+20AC0010|0000 10|101100[1110]0010 [10]000010 [10]101100E2 82 AC

  • Wikipedia hat es mit Farben

In einem anderen Beispiel war der Buchstabe im Windows-1257-Zeichensatz ein ėByte E6, in Unicode jedoch U + 0117, was den Bytes C4 97in UTF-8 entspricht. Diese Sequenzen haben eine variable Länge, für größere Positionen bis zu 4 Byte.

Wenn Sie unbedingt PuTTY zum Senden von Binärdaten verwenden müssen, öffnen Sie den Bildschirm "Fenster → Übersetzung" und wählen Sie als "Remote-Zeichensatz" entweder CP437, ISO-8859-1 oder Windows-1252. (Speichern Sie diese in einer separaten Sitzung, Sie nicht diese als globaler Standard speichern, weil es regelmäßig SSH - Verbindungen brechen.)