Bagaimana cara menghitung hexadecimal xor (^) dari shell?

16

Sayangnya bc dan calc tidak mendukung xor.

Costa
sumber

Jawaban:

21

Dengan shell POSIX:

$ printf '%#x\n' "$((0x11 ^ 0x22))"
0x33
Stéphane Chazelas
sumber
%#xbekerja di C juga, bagus!
Steven Penny
35

Seperti ini:

echo $(( 0xA ^ 0xF ))

Atau jika Anda ingin jawabannya dalam hex:

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

Sebagai catatan, calc(1) apakah mendukung xorsebagai fungsi:

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

gdb memiliki kalkulator ekspresi yang kuat:

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

Fungsi shell:

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

$1 = 0x5
Costa
sumber
4
Lucu, tetapi tampaknya seperti palu untuk memecahkan kacang!
Abligh
1
Berguna untuk kasus yang lebih umum dalam mengevaluasi ekspresi, tetapi tidak untuk XOR
Peter Cordes
5

Dimungkinkan untuk melakukannya di bc:

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

Atau dalam hex:

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

Menggunakan file logika dari sini .

Lakukan saja wget http://phodd.net/gnu-bc/code/logic.bcuntuk mendapatkannya.


sumber
Wow, situs itu adalah bc(1)surga para geek. :) Terima kasih atas tautannya.
Satō Katsura
Versi "bc" saya tampaknya tidak memiliki fungsi XOR dan hanya mengatakan:Runtime error (func=(main), adr=51): Function xor not defined.
slacy
@ Sll apakah Anda mendapatkan logic.bcfile yang direferensikan di sana? Itulah yang mendefinisikan xortampaknya
Eric Renouf