bash脚本将有符号的十六进制转换为有符号的十进制

use*_*877 4 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
Run Code Online (Sandbox Code Playgroud)

dam*_*ois 5

可能不规范,但这个函数应该做到这一点:

function conv() {
    res=$(printf "%d" "0x$1")
    (( res > 127 )) && (( res -= 256 )) 
    echo $res
}
Run Code Online (Sandbox Code Playgroud)

例如:

conv 1
conv 0A
conv 7F
conv 80
conv FF

1
10
127
-128
-1
Run Code Online (Sandbox Code Playgroud)