如何在bash中对十六进制数进行按位运算?

时间:2016-11-18 00:17:42

标签: bash shell sh

在我的bash脚本中,我有一个包含十六进制数字的字符串,例如hex="0x12345678"。是否可以将其视为十六进制数并对其进行位移?

3 个答案:

答案 0 :(得分:15)

当然你可以进行按位运算(在算术扩展中):

$ echo "$((0x12345678 << 1))"
610839792

或者:

$ echo "$(( 16#12345678 << 1 ))"
610839792

该值也可以在变量中设置:

$ var=0x12345678         # or var=16#12345678
$ echo "$(( var << 1 ))"
610839792

你可以做OR,AND和XOR:

$ echo "$(( 0x123456 | 0x876543 ))"
9925975

并以十六进制结果:

$ printf '%X\n' "$(( 0x12345678 | 0xDEADBEEF ))"     # Bitwise OR
DEBDFEFF

$ printf '%X\n' "$(( 0x12345678 & 0xDEADBEEF ))"     # Bitwise AND
12241668

$ printf '%X\n' "$(( 0x12345678 ^ 0xDEADBEEF ))"     # Bitwise XOR
CC99E897

答案 1 :(得分:13)

您可以在算术上下文中轻松地对这些数字进行位移:

$ hex="0x12345678"
$ result=$((hex << 1))
$ printf "Result in hex notation: 0x%x\n" "$result"
0x2468acf0

答案 2 :(得分:2)

Yes

算术表达式支持基数为16的数字和所有常用的C运算符。

示例:

$ hex="0xff"
$ echo $(( hex >> 1 ))
127