【问题标题】:Hex to Decimal in BashBash 中的十六进制转十进制
【发布时间】:2020-09-25 00:21:38
【问题描述】:

我知道我们可以使用 bash 将十六进制转换为十进制

#!/bin/bash
echo "Type a hex number"
read hexNum
echo $(( 16#$hexNum ))

但是当我用hexNum=9b4bbba36e494bcd 运行它时,它给了我-7256500063973061683 即负值,即2 的补码。

我不希望它是 2 补码。我想要hexNum=9b4bbba36e494bcd 的输出为11190244009736489933。正如https://www.rapidtables.com/convert/number/hex-to-decimal.html?x=9b4bbba36e494bcd上给出的那样

如何使用 bash 获得此输出?请帮忙!

【问题讨论】:

  • 这个数字溢出了 Bash 可以处理的有符号 64 位整数;见stackoverflow.com/q/51884432/3266847
  • 由于@BenjaminW 指出的原因,Bash 无法处理该数字。我看到在您的脚本中实现该目标的最简单方法是使用 Python:python -c 'print(int("9b4bbba36e494bcd", 16))'

标签: bash hex decimal


【解决方案1】:

正如 cmets 中所指出的,您的示例中的数字太大了。 bash 使用固定大小的整数进行计算。大数字会溢出。

bc 支持任意大数,也可以进行基数转换。但是,bc 要求十六进制数字以大写形式写入,因此您必须先转换输入。 bash 有一个内置的参数替换来转换为大写:

hex=9b4bbba36e494bcd
echo "ibase=16; ${hex^^}" | bc

【讨论】:

    猜你喜欢
    • 2019-05-10
    • 2014-04-20
    • 2018-07-26
    • 2015-04-21
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多