bash脚本将signed signed转换为signed signed

时间:2014-01-10 17:55:30

标签: bash shell

我是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

2 个答案:

答案 0 :(得分:4)

可能不是规范的,但是这个功能应该这样做:

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

答案 1 :(得分:1)

这应该可以解决问题

signed_dec=$(printf "%d" $signed_hex)

如果您需要将结果放在某个范围内,那么您可以通过bash arithmetic应用模运算符,例如:

signed_dec=$(($(printf "%d" 0xFAB) % 256))