如何使用 Alt 代码在 PuTTY 中传输单个十六进制值串行数据?

Jos*_*osh 1 serial-port putty hexadecimal alt-code

我正在尝试使用 PuTTY 通过串行 COM 端口发送特定的十六进制值。具体来说,我想发送十六进制代码 9C、B6、FC 和 8B。我查过这些Alt代码,分别是 156、182、252 和 139。

但是,每当我输入Alt代码时,C2 的前一个十六进制值都会在 9C、B6 和 8B 之前发送,因此发送的值是 C2 9C、C2 B6 和 C2 8B。FC 的值更改为 C3 FC。

为什么将这些值放在十六进制值之前,为什么要完全更改 FC?对我来说,内部将Alt代码转换为十六进制似乎存在问题。有没有办法直接输入十六进制值而不使用AltPuTTY 中的代码?

use*_*686 5

您所看到的只是普通的文本字符集转换。

就 PuTTY 而言,您正在输入(和读取)text,而不是原始二进制数据,因此它必须在通过网络发送之前将文本转换为任何配置字符集的字节。

换句话说,当您键入Alt+ 时1 8 2,PuTTY 会从系统配置的旧“OEM”字符集接收相应的字符。(键入Alt+0 1 8 2将从传统的“ANSI”(Windows-125x) 字符集中进行选择。)在这种情况下,字符是pilcrow。

现在 PuTTY 必须将该字符转换为字节。默认情况下,早期 PuTTY 版本会选择与操作系统本身使用的相同的旧版 Windows-125x 字符集,例如 Windows-1257,因此转换过去几乎是直接的——输入1 8 2,接收字节 182 十进制(0xB6 十六进制)。

但是,由于 PuTTY 通常连接到 Linux 或 BSD 服务器,其中绝大多数已迁移到默认的UTF-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,对应C4 97于 UTF-8 中的字节。这些序列的长度可变,对于较大的位置,最多 4 个字节。

如果您绝对必须使用 PuTTY 发送二进制数据,请打开“Window → Translation”设置屏幕,然后选择 CP437、ISO-8859-1 或 Windows-1252 作为“远程字符集”。(保存在一个单独的会话,就没有这个保存为全局默认,因为它会打破常规SSH连接。)