首页 > 解决方案 > 我需要一个带有两个二进制数的 XOR 输出作为 shell 脚本中的输入

问题描述

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

Shell 是否支持二进制数的异或运算?我也尝试从 http://phodd.net/gnu-bc/code/logic.bc下载 logic.bc 文件, 但它显示错误 Runtime error (func=(main), adr=270): Function xor没有定义的。 谁能帮我解决问题

标签: shell

解决方案


更新的答案

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

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

推荐阅读