【问题标题】:Have bc not drop the trailing zeros while converting hex to binary将十六进制转换为二进制时 bc 不删除尾随零
【发布时间】:2015-04-27 21:13:15
【问题描述】:

我有一个 bash 脚本可以将十六进制转换为二进制,但无论作为参数提供的数字如何,我都想要 8 位。例如,十六进制 00 应该是 00000000 而不是 0 或十六进制 01 应该是 00000001。这是脚本,但我不知道如何让bc 执行此操作。这是可能的还是我应该手动做?

这是我的脚本:

#!/bin/bash
for j in $@
do
    BIN=$(echo "obase=2; ibase=16; $j" | bc )
    echo $BIN
done

【问题讨论】:

    标签: bash bc


    【解决方案1】:

    我不知道bc是否支持这种行为,但你可以替换

    echo $BIN
    

    printf "%08d\n" "$BIN"
    

    【讨论】:

    • $BIN周围的双引号是必要的吗?
    • 如果BIN 包含IFS 中的某些字符,它会防止分词。在这种情况下,printf 将重用每个拆分单词的模式,并打印多个数字。使用引号,将使用整个字符串并打印错误消息。此外,printf 将以状态 1 退出并打印一个零...我不知道如何防止这种情况...也许将结果分配给变量并仅在 printf 成功时打印。跨度>
    猜你喜欢
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2016-08-28
    • 2013-07-25
    相关资源
    最近更新 更多