如何從 shell 計算十六進位異或 (^)?

如何從 shell 計算十六進位異或 (^)?

不幸的是 bc 和 calc 不支援異或。

答案1

像這樣:

echo $(( 0xA ^ 0xF ))

或者,如果您想要十六進制答案:

printf '0x%X\n' $(( 0xA ^ 0xF ))

順便說一句,calc(1) 支援xor作為函數:

$ calc
base(16)
    0xa
xor(0x22, 0x33)
    0x11

答案2

對於任何 POSIX shell:

$ printf '%#x\n' "$((0x11 ^ 0x22))"
0x33

答案3

gdb有強大的表達式計算器:

gdb -q -ex 'print/x 0xA ^ 0xF' -ex q

一個外殼函數:

calc_gdb() { gdb -q -ex "print/x $*" -ex q;}
calc_gdb 0xA ^ 0xF

$1 = 0x5

答案4

在 bc 中可以做到這一點:

echo 'xor(10,15)' | bc -l logic.bc

或以十六進位表示:

echo 'obase=16;ibase=16; xor(AA,FF)' | bc -l logic.bc

使用邏輯文件從這裡

只要去做wget http://phodd.net/gnu-bc/code/logic.bc就可以得到它。

相關內容