如何从 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就可以得到它。

相关内容