【问题标题】:How to convert a string into hexadecimal in Bash如何在 Bash 中将字符串转换为十六进制
【发布时间】:2016-03-08 16:00:24
【问题描述】:

我在 StackOverflow 上找到了很多帖子,它们用 C++、C# 和其他语言讨论了这个问题,但没有一个使用 Shell。

使用 Bash/Shell,如何将随机的 String 转换为 byte array

我试过了:

echo "some string" | xxd -r -p

但是没有用。

我基本上想要一个字节输出 - 例如)?e?GV??vY?Ge?#G

【问题讨论】:

  • 一个字节数组,用什么编码?
  • “some string”的字节输出是“some string”。
  • @alecrosic :您提供的示例输出与输入有何关联?

标签: arrays bash shell byte


【解决方案1】:

如果你想获取某个字符串的十六进制值,那么这行得通:

$ echo "testing some values"$'\157' | xxd
0000000: 7465 7374 696e 6720 736f 6d65 2076 616c  testing some val
0000010: 7565 736f 0a                             ueso.

如果你只需要“普通”字符串:

$ echo "testing some values"$'\157' | xxd -p
74657374696e6720736f6d652076616c7565736f0a

如果你需要“反转”一个 hex 字符串,你可以这样做:

$ echo "74657374696e6720736f6d652076616c7565736f0a" | xxd -r -p
testing some valueso

如果您需要的是字符表示(不是十六进制),您可以这样做:

$ echo "testing:"$'\001\011\n\bend test'  | od -vAn -tcx1
  t   e   s   t   i   n   g   : 001  \t  \n  \b   e   n   d    
 74  65  73  74  69  6e  67  3a  01  09  0a  08  65  6e  64  20
  t   e   s   t  \n
 74  65  73  74  0a

或者:

$ echo "testing:"$'\001\011\n\bend test'  | od -vAn -tax1
  t   e   s   t   i   n   g   : soh  ht  nl  bs   e   n   d  sp
 74  65  73  74  69  6e  67  3a  01  09  0a  08  65  6e  64  20
  t   e   s   t  nl
 74  65  73  74  0a

【讨论】:

  • 我能问一下你为什么在末尾加“o”($'\157')吗?我认为这些是该命令的一些标志,并花了大约 2 个小时试图找出这个额外的“o”来自哪里。
  • 无论如何,谢谢您的回答。这很有帮助。
【解决方案2】:

看起来您想将十六进制字符串转换为字节。 xxd 需要一个起点(因为它用于修补二进制文件等)

string="626c610a"
echo "0: $string" | xxd -r

xxd 也会静默跳过任何无效的十六进制,因此如果输出为空,请检查您的数据。

【讨论】:

    猜你喜欢
    • 2013-02-07
    • 2017-08-23
    • 2014-03-19
    • 2011-08-25
    • 2014-04-28
    • 2018-01-31
    • 2018-01-22
    • 1970-01-01
    相关资源
    最近更新 更多