Как вычислить шестнадцатеричное xor (^) из оболочки?

Как вычислить шестнадцатеричное xor (^) из оболочки?

К сожалению, bc и calc не поддерживают xor.

решение1

Так:

echo $(( 0xA ^ 0xF ))

Или, если вам нужен ответ в шестнадцатеричном формате:

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

Кстати,calc(1) делаетподдержка xorкак функция:

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

решение2

С любой оболочкой POSIX:

$ 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, чтобы получить его.

Связанный контент