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

Jim*_* Xu 17 bash shell sh

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

sor*_*tar 16

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

$ echo "$((0x12345678 << 1))"
610839792
Run Code Online (Sandbox Code Playgroud)

要么:

$ echo "$(( 16#12345678 << 1 ))"
610839792
Run Code Online (Sandbox Code Playgroud)

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

$ var=0x12345678         # or var=16#12345678
$ echo "$(( var << 1 ))"
610839792
Run Code Online (Sandbox Code Playgroud)

你可以做OR,AND和XOR:

$ echo "$(( 0x123456 | 0x876543 ))"
9925975
Run Code Online (Sandbox Code Playgroud)

并以十六进制获得结果:

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

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

$ printf '%X\n' "$(( 0x12345678 ^ 0xDEADBEEF ))"     # Bitwise XOR
CC99E897
Run Code Online (Sandbox Code Playgroud)


tha*_*guy 14

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

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