Bash 中的十六进制转十进制

Bin*_*ler 0 bash hex decimal

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

#!/bin/bash
echo "Type a hex number"
read hexNum
echo $(( 16#$hexNum ))
Run Code Online (Sandbox Code Playgroud)

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

我不想要它的 2 补码。我想要输出hexNum=9b4bbba36e494bcdas 11190244009736489933。如https://www.rapidtables.com/convert/number/hex-to-decimal.html?x=9b4bbba36e494bcd 所示

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

Soc*_*owi 6

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

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

hex=9b4bbba36e494bcd
echo "ibase=16; ${hex^^}" | bc
Run Code Online (Sandbox Code Playgroud)