Как рассчитать шестнадцатеричный xor (^) из оболочки?

Ответы:

21

С любой оболочкой POSIX:

$ printf '%#x\n' "$((0x11 ^ 0x22))"
0x33
Стефан Шазелас
источник
%#xработает в Си тоже, приятно!
Стивен Пенни
35

Как это:

echo $(( 0xA ^ 0xF ))

Или, если вы хотите получить ответ в шестнадцатеричном виде:

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

На стороне записки, calc(1) делает поддержку xorв виде функции:

$ calc
base(16)
    0xa
xor(0x22, 0x33)
    0x11
Сату Кацура
источник
12

GDB имеет мощный калькулятор выражений:

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

Функция оболочки:

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

$1 = 0x5
ребро
источник
4
Забавно, но похоже на кувалду сломать орех!
abligh
1
Полезно для более общего случая вычисления выражений, но не для XOR
Peter Cordes
5

Это можно сделать в bc:

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

Или в шестнадцатеричном виде:

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

Используя файл логики отсюда .

Просто сделай, wget http://phodd.net/gnu-bc/code/logic.bcчтобы получить это.


источник
Вау, этот сайт - bc(1)рай для гиков. :) Спасибо за ссылку.
Satō Katsura
Моя версия "bc", похоже, не имеет функции XOR и просто говорит:Runtime error (func=(main), adr=51): Function xor not defined.
slacy
@slacy вы получили logic.bcфайл, на который есть ссылки? Это то, что определяет, xorкажется
Эрик Ренуф