Como calcular o hexadecimal xor (^) do shell?

15

Infelizmente bc e calc não suportam xor.

    
por Const 27.06.2016 / 12:12

4 respostas

20

Com qualquer shell POSIX:

$ printf '%#x\n' "$((0x11 ^ 0x22))"
0x33
    
por 27.06.2016 / 12:25
34

Assim:

echo $(( 0xA ^ 0xF ))

Ou se você quiser a resposta em hexadecimal:

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

Em uma nota lateral, calc(1) suporta xor como uma função:

$ calc
base(16)
    0xa
xor(0x22, 0x33)
    0x11
    
por 27.06.2016 / 12:26
12

O gdb tem uma poderosa calculadora de expressões:

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

Uma função de shell:

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

$1 = 0x5
    
por 27.06.2016 / 12:22
5

É possível fazer isso em bc:

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

Ou em hexadecimal:

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

Usando o arquivo de lógica aqui .

Basta fazer wget http://phodd.net/gnu-bc/code/logic.bc para obtê-lo.

    
por 28.06.2016 / 00:23