我只是想将字符串转换$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