BASH二进制补码与Hex值的示例?

时间:2015-08-03 23:53:16

标签: bash hex decimal twos-complement

我有一个通过SNMP收集十六进制值的例程。这是我的bash脚本08 01 18 00 FF FF中的真实集合。该值基于expr $((16#$ {array [4]})) - $((16#$ {array [5]}))所以结果是0,我如何介绍两个是补码? expr $((16#$ {array [4]})) - $((16#$ {array [5]}))的正确值是-1,基于我正在处理的示例。

1 个答案:

答案 0 :(得分:2)

为方便起见,让我们创建一个bash函数:

twos() { x=$((16#$1)); [ "$x" -gt 127 ] && ((x=x-256)); echo "$x"; }

现在:

$ twos FF
-1
$ twos FE
-2
 $ twos 01
1

在一次通话中转换多个值

定义扩展二进制补码函数:

$ twosx() { for x in "$@"; do x=$((16#$x)); [ "$x" -gt 127 ] && ((x=x-256)); printf "%s " "$x"; done; echo ""; }

样本用法:

$ twosx 00 01 7F 80 FE FF
0 1 127 -128 -2 -1