如何使 hexdump 不等待来自 stdin 的 16 个字符来显示其十六进制值?

如何使 hexdump 不等待来自 stdin 的 16 个字符来显示其十六进制值?

如果我hexdump在终端中没有任何参数地打开:

hexdump

当我在终端中输入内容并按 时Enterhexdump将显示我输入的任何字符的十六进制值。

hexdump如果我输入 16 个字符,则仅显示十六进制值,例如:

在此输入图像描述

在这里,我输入了该字符a15 次并按下Enter(因此hexdump收到了 16 个字符 (15 a+ \n))。

但如果我输入的字符少于 16 个,例如:

在此输入图像描述

在这里,我输入了该字符a14 次并按下Enter(因此hexdump收到了 15 个字符 (14 a+ \n))。在这种情况下hexdump没有显示任何内容。

我可以hexdump显示接收到的任意长度字符的十六进制值,而不是等待接收 16 个字符吗?

笔记: 我不想 ”使用 hexdump 和 xxd 选项将每行一个字节显示为十六进制“(正如此处评论中所建议的那样)。我想做的基本上是例如知道 A 的十六进制值是多少,而不必键入额外的 15 个字符来获取它。

答案1

尝试hexdump -v -e '/1 "%02X\n"'。每行显示一个十六进制字节,因此行输出缓冲不会阻止该行的显示。

然后,您只需键入 A 并 return 即可知道 A 的十六进制值。您仍然需要键入 return,因为 shell 缓冲区还对输入进行行缓冲。

man ascii也有效。 :-)

答案2

可以写入同一行无缓冲包装十六进制转储到 stdbuf。 Bash 示例(由于一些读取命令选项而需要它):

while read -s -n1 k; do printf $k; done | stdbuf -o0 hexdump -e '1/1 "%x"'

相关内容