Comment calculer le xor hexadécimal (^) à partir du shell?

16

Malheureusement, bc et calc ne prennent pas en charge xor.

Costa
la source

Réponses:

21

Avec n'importe quel shell POSIX:

$ printf '%#x\n' "$((0x11 ^ 0x22))"
0x33
Stéphane Chazelas
la source
%#xfonctionne aussi en C, sympa!
Steven Penny
35

Comme ça:

echo $(( 0xA ^ 0xF ))

Ou si vous voulez la réponse en hexadécimal:

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

Sur une note latérale, calc(1) prend en charge en xortant que fonction:

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

gdb a une calculatrice d'expression puissante:

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

Une fonction shell:

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

$1 = 0x5
Costa
la source
4
Amusant, mais cela ressemble à un marteau pour casser une noix!
abligh
1
Utile pour le cas plus général de l'évaluation des expressions, mais pas pour XOR
Peter Cordes
5

Il est possible de le faire en BC:

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

Ou en hex:

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

Utilisation du fichier logique d'ici .

Il suffit wget http://phodd.net/gnu-bc/code/logic.bcde l'obtenir.


la source
Wow, ce site est le bc(1)paradis des geek. :) Merci pour le lien.
Satō Katsura
Ma version de "bc" ne semble pas avoir la fonction XOR et dit simplement:Runtime error (func=(main), adr=51): Function xor not defined.
slacy
@slacy avez-vous logic.bcréférencé le fichier? C'est ce qui définit xorcela semble
Eric Renouf