首页 > 解决方案 > Bash 中的十六进制转十进制

问题描述

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

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

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

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

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

标签: bashhexdecimal

解决方案


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

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

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

推荐阅读