在我的bash
脚本中,我有一个包含十六进制数字的字符串,例如hex="0x12345678"
。是否可以将其视为十六进制数并对其进行位移?
答案 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)