【问题标题】:How to move terminal cursor with ASCII code?如何用 ASCII 码移动终端光标?
【发布时间】:2014-08-28 23:14:47
【问题描述】:
#include <stdio.h>
int main()
{
    printf("asd");
    char code[4] = { 0x08 ,  0x1b , 0x5b ,0x4b } ; 
    int i = 0 ; 
    while ( i  < 4  )
    {   
        putc(code[i], stdout);
        i++;
    }   
    printf("\n");
    return 0;
}

输出:

[root@localhost ~]# ./a.out

作为

[root@localhost ~]#

似乎代码“0x08”将终端光标向左移动到字母“d”位置,并且“0x1b,0x5b,0x4b”清除了字母“d”。 我想知道一些代码的含义,例如 { 0x08 , 0x1b , 0x5b ,0x4b } 。有相关资料吗?

谢谢。

【问题讨论】:

  • 您可能需要参考 ASCII 码。 asciitable.com
  • 感谢您的回复。我使用 putc( 0x4b , stdout) 。它会将字符“K”打印到终端。但是当我把“0x08、0x1b、0x5b、0x4b”一一放入时,它不会打印K。所以我猜代码“0x08,0x1b,0x5b,0x4b”控制终端的外观就像一个命令。
  • @rcs:ASCII 没有指定终端代码。 konsolebox's answer 指向一篇关于所谓 ANSI 转义码(实际上由 ISO/IEC 6429 / ECMA-48 定义)的维基百科文章。

标签: c bash terminal ncurses


【解决方案1】:

ANSI escape code

一个简单的方法是

printf("\e[10C%s\n", "XYZ");

它将光标向右移动 10 列并打印 XYZ:

          XYZ

【讨论】:

  • ;\e' 表示转义是非标准的; gcc 支持它,但其他编译器可能不支持。如果您想要更多可移植代码,请改用 '\x1b'。
  • @KeithThompson 谢谢。从来不知道。
  • 我很确定 \x1b 转义也可以写成 \033
【解决方案2】:

另一个支持我猜测的例子:

#include <stdio.h>
int main()
{
    printf("asd");
    char code[8] = { 0x08 ,  0x1b , 0x5b ,0x4b , 0x08 ,  0x1b , 0x5b ,0x4b } ; 
    int i = 0 ; 
    while ( i  < 8  )
    {   
        putc(code[i], stdout);
        i++;
    }   

    printf("\n");
    return 0;
}

输出:

[root@localhost ~]# ./a.out

一个

[root@localhost ~]#

【讨论】:

    猜你喜欢
    • 2018-12-05
    • 2019-02-11
    • 2018-08-05
    • 2013-01-07
    • 1970-01-01
    • 2020-06-28
    • 2012-05-22
    • 1970-01-01
    • 2011-07-17
    相关资源
    最近更新 更多