Bash 中的十六进制到十进制
Hex to Decimal in Bash
我知道我们可以在 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
使用固定大小的整数进行计算。大数会溢出。
bc
支持任意大数,也可以进行基数转换。但是,bc
要求十六进制数必须大写,因此您必须先转换输入。 bash
有一个内置参数替换转换为大写:
hex=9b4bbba36e494bcd
echo "ibase=16; ${hex^^}" | bc
我知道我们可以在 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
使用固定大小的整数进行计算。大数会溢出。
bc
支持任意大数,也可以进行基数转换。但是,bc
要求十六进制数必须大写,因此您必须先转换输入。 bash
有一个内置参数替换转换为大写:
hex=9b4bbba36e494bcd
echo "ibase=16; ${hex^^}" | bc