¿Cómo calcular hexadecimal xor (^) a partir de shell?

Respuestas:

21

Con cualquier shell POSIX:

$ printf '%#x\n' "$((0x11 ^ 0x22))"
0x33
Stéphane Chazelas
fuente
%#xtambién funciona en C, ¡bien!
Steven Penny
35

Me gusta esto:

echo $(( 0xA ^ 0xF ))

O si quieres la respuesta en hexadecimal:

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

En una nota al margen, calc(1) es compatible xorcomo una función:

$ calc
base(16)
    0xa
xor(0x22, 0x33)
    0x11
Satō Katsura
fuente
12

gdb tiene una poderosa calculadora de expresiones:

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

Una función de shell:

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

$1 = 0x5
Costa
fuente
44
Divertido, ¡pero parece un mazo romper una nuez!
Abligh
1
Útil para el caso más general de evaluar expresiones, pero no para XOR
Peter Cordes
5

Es posible hacer eso en bc:

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

O en hexadecimal:

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

Usando el archivo lógico desde aquí .

Solo hazlo wget http://phodd.net/gnu-bc/code/logic.bcpara conseguirlo.


fuente
Wow, ese sitio es el bc(1)paraíso del geek. :) Gracias por el enlace.
Satō Katsura
Mi versión de "bc" no parece tener la función XOR y solo dice:Runtime error (func=(main), adr=51): Function xor not defined.
slacy
@slacy, ¿obtuviste el logic.bcarchivo referenciado allí? Eso es lo que define xorparece
Eric Renouf