我需要一个XOR输出,其中两个二进制数作为shell脚本中的输入

时间:2019-01-21 07:42:32

标签: shell

我正在尝试对shell中的两个二进制数执行XOR按位运算。 如果, a = 00001000 b = 00110011 我的输出应该是00111011

Shell是否支持对二进制数字进行XOR操作? 我也尝试过从下载Logic.bc文件 http://phodd.net/gnu-bc/code/logic.bc 但是它显示了错误 运行时错误(func =(main),adr = 270):函数xor未定义。 谁能帮我解决这个问题

1 个答案:

答案 0 :(得分:0)

更新后的答案

您的数字似乎是二进制数字的字符串,因此您需要进行以下转换:

perl -e 'print (oct("0b".$ARGV[0])^oct("0b".$ARGV[1]))' 00111100 00001101
49

或者,如果您想要相同格式的答案:

perl -e 'printf("%.8b",oct("0b".$ARGV[0])^oct("0b".$ARGV[1]))' 00111100 00001101
00110001

原始答案

与其引入下载晦涩的bc脚本的依赖,不如考虑利用已经内置的内容。

例如,Perl内置在Linux和macOS上:

perl -e 'print ((0+$ARGV[0])^$ARGV[1])' 60 13
49

类似PHP:

php -r 'echo (0+$argv[1])^$argv[2];' 60 13
49

您可能有awk

awk -v x=60 -v y=13 'BEGIN{print xor(x,y)}'
49

或者Python:

python -c 'import sys; print(int(sys.argv[1])^int(sys.argv[2]))' 60 13
49