2014-01-10 58 views
3

我是BASH腳本的新手,但我需要一種將帶符號的十六進制轉換爲帶符號的十進制的快速方法。例如,FF應該是-1而不是256.msbit應該是符號位。bash腳本將帶符號的十六進制轉換爲帶符號的十進制

到目前爲止我有..我需要並從一個簽名的十六進制字符號十進制。

#! /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 
+0

255會被接受而不是-1嗎? – cmh

回答

1

如果您需要的結果,以適應一定範圍之內,那麼你可以通過bash arithmetic例如應用模運算這應該做的伎倆

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

signed_dec=$(($(printf "%d" 0xFAB) % 256)) 
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 
相關問題