如何从shell计算十六进制xor(^)?

Cos*_*sta 17 shell calculator hex

不幸的是 bc 和 calc 不支持异或。

Sat*_*ura 37

像这样:

echo $(( 0xA ^ 0xF ))
Run Code Online (Sandbox Code Playgroud)

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

printf '0x%X\n' $(( 0xA ^ 0xF ))
Run Code Online (Sandbox Code Playgroud)

附带说明一下,calc(1) 是否支持xor作为函数:

$ calc
base(16)
    0xa
xor(0x22, 0x33)
    0x11
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 22

使用任何 POSIX shell:

$ printf '%#x\n' "$((0x11 ^ 0x22))"
0x33
Run Code Online (Sandbox Code Playgroud)

  • @StevenPenny,请注意,与“0x%x”的一个区别是它为 0 提供“0”而不是“0x0”。 (2认同)

Cos*_*sta 14

gdb 有强大的表达式计算器:

gdb -q -ex 'print/x 0xA ^ 0xF' -ex q
Run Code Online (Sandbox Code Playgroud)

一个壳函数:

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

$1 = 0x5
Run Code Online (Sandbox Code Playgroud)

  • 有趣,但它似乎是敲碎坚果的大锤! (4认同)

小智 6

在 bc 中可以这样做:

echo 'xor(10,15)' | bc -l logic.bc
Run Code Online (Sandbox Code Playgroud)

或十六进制:

echo 'obase=16;ibase=16; xor(AA,FF)' | bc -l logic.bc
Run Code Online (Sandbox Code Playgroud)

使用这里逻辑文件

只是wget http://phodd.net/gnu-bc/code/logic.bc为了得到它。