ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [20170308]bc做xor(异或)计算.txt

[20170308]bc做xor(异或)计算.txt

Linux操作系统 作者:lfree 时间:2017-03-08 15:58:38 0 删除 编辑

[20170308]bc做xor(异或)计算.txt

--//工作需要,需要找一个计算器做异或操作.微软的计算器太难用了.我需要行式的计算器.
--//google半天,发现如下链接:
http://unix.stackexchange.com/questions/292344/how-to-calculate-hexadecimal-xor-from-shell

--//找到如下链接:
http://phodd.net/gnu-bc/index.html
--//简直就是bc的宝库.不过我仅仅需要logic.bc,例子:

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

--//我昨天计算如下数值的xor,结果如下:
9cb5
0400
0100
0200
0100
0000
0100
----
9bb5


$ cat xor.sh
#! /bin/bash
# just play , calc xor!!

s='0'
for i in $(cat $1| tr 'a-f' 'A-F')
do
    #echo "obase=16;ibase=16; xor($s,$i)"
    echo $i
   
    s=$(echo "obase=16;ibase=16; xor($s,$i)" | bc -l ~/bc/logic.bc)
done
echo -e "\nxor result: $s \n"


$ cat a.txt
9cb5
0400
0100
0200
0100
0000
0100


--//执行如下:
$ xor.sh a.txt
9CB5
0400
0100
0200
0100
0000
0100

xor result: 9BB5
--OK,结果正确!!

--//再找一个redo文件头做验证看看.
$ xxd -seek 512 -l 512 -c 16 -g 2 /mnt/ramdisk/book/redo01.log | cut -c10-50 > aa1.txt

$ xor.sh aa1.txt
...

xor result: 0

--//说明结果正确.这种脚本不讲究运算效率,不断调用bc效率不会很高,而是讲究快速编程.最后修改如下,'0000'不参与运算.

$ cat ~/bin/xor.sh
#! /bin/bash
# just play , calc xor!!

s='0'
for i in $(cat $1| tr 'a-f' 'A-F')
do
    #echo "obase=16;ibase=16; xor($s,$i)"
    echo $i
    [ $i != '0000' ] &&  s=$(echo "obase=16;ibase=16; xor($s,$i)" | bc -l ~/bc/logic.bc)
done
echo -e "\nxor result: $s \n"

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2134945/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969672