我是 BASH 脚本的新手,但我需要一种快速的方法将有符号十六进制转换为有符号十进制。例如,FF 应该是 -1 而不是 256。msbit 应该是符号位。
到目前为止,我有..我需要从有符号的十六进制单词中签名十进制。
#! /bin/sh
ADDR=`echo $1 | tr a-z A-Z`
ADDR2=`echo "ibase=16; obase=10; $ADDR+1" | bc`
VARmsb=`./mpu-6050-getbyte $ADDR;`
VARlsb=`./mpu-6050-getbyte $ADDR2;`
echo $VARmsb$VARlsb
可能不是规范的,但这个函数应该这样做:
function conv() {
res=$(printf "%d" "0x$1")
(( res > 127 )) && (( res -= 256 ))
echo $res
}
例如:
conv 1
conv 0A
conv 7F
conv 80
conv FF
1
10
127
-128
-1
这应该可以解决问题
signed_dec=$(printf "%d" $signed_hex)
如果您需要结果适合某个范围,那么您可以通过 bash 算术应用模运算符,例如:
signed_dec=$(($(printf "%d" 0xFAB) % 256))