Wie berechnet man hexadezimales xor (^) aus der Shell?

16

Leider unterstützen bc und calc xor nicht.

Costa
quelle

Antworten:

21

Mit jeder POSIX-Shell:

$ printf '%#x\n' "$((0x11 ^ 0x22))"
0x33
Stéphane Chazelas
quelle
%#xfunktioniert auch in C, schön!
Steven Penny
35

So was:

echo $(( 0xA ^ 0xF ))

Oder wenn Sie die Antwort in hex haben wollen:

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

Auf einer Seite zur Kenntnis, calc(1) tut Unterstützung xorals eine Funktion:

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

gdb hat einen leistungsstarken Ausdrucksrechner:

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

Eine Shell-Funktion:

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

$1 = 0x5
Costa
quelle
4
Amüsant, aber es scheint wie ein Vorschlaghammer, eine Nuss zu knacken!
abligh
1
Nützlich für den allgemeineren Fall der Auswertung von Ausdrücken, aber nicht für XOR
Peter Cordes
5

Das ist möglich in bc:

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

Oder in hex:

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

Verwenden Sie die Logikdatei von hier .

Mach wget http://phodd.net/gnu-bc/code/logic.bces einfach , um es zu bekommen.


quelle
Wow, dieser Ort ist der bc(1)Himmel für Geeks. :) Danke für den Link.
Satō Katsura
Meine Version von "bc" scheint keine XOR-Funktion zu haben und sagt nur:Runtime error (func=(main), adr=51): Function xor not defined.
slacy
@slacy hast du die logic.bcDatei bekommen, auf die dort verwiesen wird? Das ist, was xores scheint definiert
Eric Renouf