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のコード?
表示されているのは、通常のテキスト文字セット変換です。
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+00B6
→0000|0000 10|110110
→[110]00010 [10]110110
→C2 B6
U+00FC
→0000|0000 11|111100
→[110]00011 [10]111100
→C3 BC
U+20AC
→0010|0000 10|101100
→[1110]0010 [10]000010 [10]101100
→E2 82 AC
ウィキペディアには色があります
別の例として、文字ė
はWindows-1257文字セットではバイトE6
でしたが、UnicodeではU + 0117であり、UTF-8のバイトC4 97
に対応します。これらのシーケンスは可変長であり、より大きな位置では最大4バイトです。
どうしてもPuTTYを使用してバイナリデータを送信する必要がある場合は、[ウィンドウ→変換]設定画面を開き、[リモート文字セット]としてCP437、ISO-8859-1、またはWindows-1252のいずれかを選択します。 (これを別のセッションに保存します。通常のSSH接続が切断されるため、これをグローバルデフォルトとして保存しますnot)。