我如何读取扩展名为0x0的十六进制数作为普通十六进制数或整数

问题描述 投票:0回答:1

我正在尝试从树莓派读取i2c地址中的值。通过使用i2ctools,我可以获取一个地址并将其存储在变量中。

reg_state=$(i2cget -y 1 0x20 0x09)
echo "$reg_state"
:~/ $ 0x0a

但是,尽管地址读入正确,但是reg_state将保留十六进制扩展名“ 0x0”,这会妨碍操作。假设0x0a之前在寄存器中,并且我想在该值上加上“ 1”,该操作将无法完成。我认为这与我要达到目标的方式有关。现在,我的代码如下所示:

7 addition(){
8   reg_state=$(i2cget -y 1 0x20 0x09)
9   i=$(echo "obase=10; $reg_state"| bc)
10  write=$(i+adj )
}
...
25
26#Main Shell Script
27
28 op=$1
29 adj=$2
30 if [ $1 -gt 0 ]
31 then
32   addition
33 fi

我试图做的是在一个地址中读取寄存器的值,将其转换为十进制数字,然后将其与我想要的任何数字相加。但是,我注意到由于存在'0x',因此无法使用echo "obase=10; $reg_state | bc"。当转换不带扩展名的十六进制数字时,一切正常,可以像往常一样添加它们。

话虽这么说,我仍然可以摆脱'0x'部分,只剩下剩下的东西,这样我就可以和平进行算术了吗?

shell type-conversion hex decimal i2c
1个回答
0
投票

即使对十六进制数字,您也不需要bc进行整数数学运算。只需使用Shell算术扩展即可。例如,echo "$(( 0xA + 1))"将显示11。如果您需要十六进制的结果:

printf "0x%X" $(( 0xA + 1))

将打印0xB。

© www.soinside.com 2019 - 2024. All rights reserved.