【问题标题】:Linux shell scripting: hex number to binary stringLinux shell 脚本:十六进制数到二进制字符串
【发布时间】:2012-03-07 17:00:24
【问题描述】:

我正在寻找一些在 shell 脚本中将十六进制数转换为 0 和 1 字符序列的简单方法。

例子:

5F -> "01011111"

是否有任何命令或简单的方法来完成它或者我应该为它写一些开关?

【问题讨论】:

    标签: linux shell hex


    【解决方案1】:
    echo "ibase=16; obase=2; 5F" | bc
    

    【讨论】:

    • 谢谢,和我选的正确答案一样,有解释就选了
    • 这与选择的答案不同。这有5F,而选定的答案有5f。此答案在 bc 1.06.95 中有效,而所选答案无效。
    【解决方案2】:

    我在 Linux 中使用了“bc”命令。 (比转换复杂得多的计算器!)

    echo 'ibase=16;obase=2;5f' |公元前

    ibase 参数是输入基数(在这种情况下是六进制),而 obase 是输出基数(二进制)。

    希望对你有帮助。

    【讨论】:

    • ibase 之前设置obase。如果首先定义ibasebc 将尝试解释obase,就好像它是用ibase 编写的一样,可能会产生错误的结果。见this question
    • 使用bc 版本 1.06.95 echo 'ibase=16;obase=2;5f' | bc 会产生错误:(standard_in) 1: syntax error。但是,echo 'ibase=16;obase=2;5F' | bc 工作并产生 1011111
    【解决方案3】:
    $ printf '\x5F' | xxd -b | cut -d' ' -f2
    01011111
    

    或者

    $ dc -e '16i2o5Fp'
    1011111
    
    • i 命令将弹出堆栈顶部并将其用作输入基数。
    • Hex 数字必须大写以避免与 dc 命令冲突,并且如果输入基数大于 16,则不限于 A-F。李>
    • o 命令对输出库执行相同的操作。
    • p 命令将打印堆栈顶部并在其后添加换行符。

    【讨论】:

    • 感谢您的回复,很高兴有这么多方法来完成这项任务:) 我选择了“bc”变体
    【解决方案4】:

    Perl 的printf 已经知道二进制:

    $ perl -e 'printf "%08b\n", 0x5D'
    01011101
    

    【讨论】:

      【解决方案5】:

      我为这类工作写了https://github.com/tehmoon/cryptocli

      这是一个例子:

      echo -n 5f5f5f5f5f | cryptocli dd -decoders hex -encoders binary_string
      

      产量:

      0101111101011111010111110101111101011111
      

      反之亦然。

      注意:它并不完美,需要做很多工作,但它正在发挥作用。

      【讨论】:

        猜你喜欢
        • 2016-02-26
        • 2014-07-15
        • 2012-11-20
        • 2015-05-26
        • 2012-12-12
        • 1970-01-01
        • 1970-01-01
        • 2017-03-22
        相关资源
        最近更新 更多