web-dev-qa-db-ja.com

Altコードを使用してPuTTYで単一の16進値のシリアルデータを送信するにはどうすればよいですか?

PuTTYを使用してシリアルCOMポートを介して特定の16進値を送信しようとしています。具体的には、16進コード9C、B6、FC、および8Bを送信したいと思います。私は調べました Alt これらのコードは、それぞれ156、182、252、および139です。

ただし、入力するたびに Alt コードでは、C2の先行する16進値が9C、B6、および8Bの前に送信されるため、送信される値はC2 9C、C2 B6、およびC28Bです。 FCの値がC3FCに変更されます。

これらの値が16進値の前に配置されるのはなぜですか?また、FCが完全に変更されるのはなぜですか?私には、内部変換に問題があるようです。 Alt 16進数へのコード。使用せずに16進値を直接入力する方法はありますか Alt PuTTYのコード?

1
Josh

表示されているのは、通常のテキスト文字セット変換です。

PuTTYに関する限り、生のバイナリデータではなく、textを入力(および読み取り)しているため、テキストをバイトに変換する必要があります。有線で送信する前に構成された文字セット。

言い換えれば、あなたがタイプするとき Alt+1 8 2、PuTTYは、システムが構成されている従来の「OEM」文字セットから、対応する文字を受け取ります。 (タイピング Alt+0 1 8 2 従来の「ANSI」(Windows-125x)文字セットから選択します。)この場合、文字は、段落記号です。

ここで、PuTTYはその文字をバイトに変換する必要があります。以前のPuTTYバージョンは、デフォルトで、OS自体が使用するものと同じレガシーWindows-125x文字セットを選択します。 Windows-1257なので、変換はほとんど直接的なものでした–入力 1 8 2、バイト182 10進数(0xB6 16進数)を受信します。

ただし、PuTTYは通常LinuxまたはBSDサーバーに接続し、その大部分はデフォルトで TF-8 に移行しているため、最新のPuTTYリリースでもデフォルトでUTF-8の使用が開始されました。 UTF-8はUnicodeメガ文字セットのエンコーディングであり、位置U + 00B6にがあり、ほとんどが偶然ですそのUTF-8はその値をバイトとしてエンコードします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

  • ウィキペディアには色があります

別の例として、文字ėはWindows-1257文字セットではバイトE6でしたが、UnicodeではU + 0117であり、UTF-8のバイトC4 97に対応します。これらのシーケンスは可変長であり、より大きな位置では最大4バイトです。

どうしてもPuTTYを使用してバイナリデータを送信する必要がある場合は、[ウィンドウ→変換]設定画面を開き、[リモート文字セット]としてCP437、ISO-8859-1、またはWindows-1252のいずれかを選択します。 (これを別のセッションに保存します。通常のSSH接続が切断されるため、これをグローバルデフォルトとして保存しますnot)。

5
user1686