【发布时间】:2013-12-22 22:54:21
【问题描述】:
我遇到了一些问题。为了做我正在尝试的事情,我需要能够在不使用 IO 重定向的情况下将纯十六进制值输入到命令行的标准输入中(特别是输入到程序内部的 gets() 调用中)。我通常通过使用 ctrl + u + number 输入与输入的十六进制值等效的 ascii 字符来获得成功,但我需要能够输入终端忽略或解释为操作而不是字符的空字符/退格/等.如果我使用管道或 IO 重定向,在初始输入和程序关闭后我无法与程序交互。有人有什么想法吗?我认为可能的解决方案是:
- 想办法手动输入字符并保留它们
- 找到一种方法来输入不是 unicode 或 ascii 但仍将被接受为字节信息的字符
- 找到一种方法,将输入通过管道或重定向到被解释为来自命令行的程序,然后以某种方式说服它立即将输入控制权交还给命令行
我什至不确定第三个是否可能或有用,因为我不完全确定如果程序直接从命令行以外的任何地方获取信息,为什么程序不工作,我只知道我必须手动输入,否则无法运行。有人对这 3 个选项中的任何一个或您能想到的任何其他选项有任何想法吗?我被难住了。
(哦,还有,如果有人能解释为什么有时 ctrl+u+number 会输出与输入的数字完全不同的十六进制值的字符,我很好奇,但我认为它不会帮助我反正目前的问题。)
【问题讨论】:
-
“完全不同的十六进制值”?
-
我的意思是,例如,我输入 ctrl+u+4748,如果我用 xxd 查看它的值类似于 c0f9。
-
xxd 显示用于编码字符的字节,而不是 Unicode 代码点。
-
啊,我没有意识到两者之间存在差异。我将如何从字节创建一个字符,以便它的编码是我想要的,而不是它的代码点?
-
一般不用,因为输入法会帮你转换。
标签: linux unix unicode io ascii