如何将 bash 脚本中的字符串转换为以特定基数解释的数字?

如何将 bash 脚本中的字符串转换为以特定基数解释的数字?

我只是想将字符串转换$RECORD_HDR为数字$RECORD_SIZE,其中

echo $RECORD_HDR给出 003D 并且 echo $RECORD_SIZE应该给出 61

答案1

来自bash手册:

以 0 开头的常量被解释为八进制数。前导 0x 或 0X 表示十六进制。

因此:

$ RECORD_HDR="003D"
$ RECORD_SIZE=$((0x$RECORD_HDR))
$ echo "$RECORD_SIZE"
61

答案2

这里有几种方法:

使用bc计算器并显式设置输入基数(非常便携):

RECORD_SIZE=`echo "ibase=16;$RECORD_HDR" | bc`

使用具有显式基数的算术评估(至少是 ksh 和 bash - 不确定此构造的可移植性如何):

RECORD_SIZE=$((16#$RECORD_HDR))

答案3

您可以使用 awk丝绒库:

$ velour -n 'print mt_basecon("3D", 16, 10)'
61

或者:

$ velour -n 'print mt_basecon(ARGV[1], 16, 10)' 3D
61

相关内容