假设我有一个字符串 5a
。
这是 ASCII 字母 Z
的十六进制表示。
我需要找到一个 Linux shell 命令,该命令将采用十六进制字符串并输出十六进制字符串所代表的 ASCII 字符。
所以如果我这样做:
echo 5a | command_im_looking_for
我会看到一个单独的字母 Z
:
Z
原文由 Krystian Cybulski 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设我有一个字符串 5a
。
这是 ASCII 字母 Z
的十六进制表示。
我需要找到一个 Linux shell 命令,该命令将采用十六进制字符串并输出十六进制字符串所代表的 ASCII 字符。
所以如果我这样做:
echo 5a | command_im_looking_for
我会看到一个单独的字母 Z
:
Z
原文由 Krystian Cybulski 发布,翻译遵循 CC BY-SA 4.0 许可协议
我曾经用 xxd 做到这一点:
echo -n 5a | xxd -r -p
但后来我意识到在 Debian/Ubuntu 中,xxd 是 vim-common 的一部分,因此可能不会出现在最小系统中。为了避免使用 Perl(恕我直言,这也不是最小系统的一部分),我最终使用了 sed、xargs 和 printf,如下所示:
echo -n 5a | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf
大多数情况下,我只想转换几个字节,这样的任务没问题。该解决方案相 对于 ghostdog74 解决方案的优势在于,它可以自动转换任意长度的十六进制字符串。使用 xargs 是因为 printf 不从标准输入读取。
原文由 josch 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答793 阅读✓ 已解决
2 回答3.2k 阅读
请注意,这不会跳过非十六进制字符。如果您只想要十六进制(原始字符串中没有空格等):
此外,
zsh
和bash
在echo
中原生支持此功能: