-1

我正在解释串行端口的一些输出。输出采用VT100 协议。VT100 终端协议使用一些控制字符序列来设置光标在屏幕上的位置。控制序列如下所示:

ESC[行;列H

例如,

ESC[01;01H 表示将光标设置到第 1 行第 1 列。

但是当列号超过 2 位数字时,我会看到以下序列。

ESC[10;:0H

请注意分号后的额外“ : ”。此控制序列出现在 之后ESC[10;99H,即第 10 行第 99 列。

我的理解是:0= 100。但是如果列号是 200 呢?

4

2 回答 2

1

我不认为这实际上是有效的,或者,如果是的话,这完全是偶然的。传递给CUP(光标位置)命令(以及屏幕坐标中涉及的许多其他命令)的参数仅限于一位或两位数字。

在 ASCII 表中,数字9后跟:so,其中99将表示9 * 10 + 9:0 可能表示10 * 10 + 0100

在此处输入图像描述

假设该错误适用于更高的数字(我对此没有信心),您正在寻找200,这将是20 * 10 + 0或可能是D0D:ASCII 表中的字符高 10 位)。

于 2015-10-21T04:04:46.723 回答
1

不,相关标准没有规定位数限制为2,例如因为 VT100 可以寻址 24 行 x 132 列。

参数中的前导零被忽略。很可能,OP 正在报告仅使用两位数的问题(来自一些未提及的程序)。这与终端本身无关(可能在针对终端模拟器开发人员的错误报告的上下文中除外)。

调整大小程序假定一个终端不大于 999 x 999 以将光标定位到“过去”屏幕的右下角。对于那些不依赖多个像素来识别字符的人,xterm 确实使用了一种称为“不可读”的字体,这可能会导致更大的屏幕。

顺便说一句,问题中给出的来源不是很好,虽然不是最差的——请参阅vt100.netECMA-48

于 2015-10-21T09:05:54.123 回答