Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ruby中对2个字符串执行按位异或_Ruby_Bit Manipulation_Xor - Fatal编程技术网

在ruby中对2个字符串执行按位异或

在ruby中对2个字符串执行按位异或,ruby,bit-manipulation,xor,Ruby,Bit Manipulation,Xor,我正在尝试对ruby中的两个键字符串执行按位异或: 键1:0123456789abcdeffedcba9876543210 键2:00000000000000000000000000 谁能告诉我怎么做,谢谢 有人能告诉我怎么做吗 Ruby中的XOR运算符是^。它可以作为按位和布尔值使用,具体取决于它的参数(请记住,^是一个运算符和一个方法^(x))。在默认类中,Stringis不存在,但您可以自己轻松实现它: class String # converts to array of c

我正在尝试对ruby中的两个键字符串执行按位异或:

键1:0123456789abcdeffedcba9876543210
键2:00000000000000000000000000

谁能告诉我怎么做,谢谢

有人能告诉我怎么做吗

Ruby中的XOR运算符是
^
。它可以作为按位和布尔值使用,具体取决于它的参数(请记住,
^
是一个运算符和一个方法
^(x)
)。在默认类中,
String
is不存在,但您可以自己轻松实现它:

class String

    # converts to array of chars
    def to_a
        ret = []
        self.each_char do |c|
            ret.push c
        end
        return ret
    end

    # given two numeric strings,
    # returns the bitwise xor string
    def ^(s)
        aa = self.to_a
        ab = s.to_a
        lc = (aa.count < ab.count) ? aa.count : ab.count
        ret = ""
        lc.times do |i|
            x = aa[i].to_i ^ ab[i].to_i
            ret = ret + x.to_s
        end
        return ret
    end

end
类字符串
#转换为字符数组
def to_a
ret=[]
self.u char do|c|
再推
结束
回程网
结束
#给定两个数字字符串,
#返回按位异或字符串
定义^(s)
aa=自对a
ab=s.to_a
lc=(aa计数
这只是一个例子,还没有经过测试



如果我要在执行逐位异或之前将每个字节转换为二进制。我该怎么做

好的,您想看看或,然后用这些方法实现上面的代码

有人能告诉我怎么做吗

Ruby中的XOR运算符是
^
。它可以作为按位和布尔值使用,具体取决于它的参数(请记住,
^
是一个运算符和一个方法
^(x)
)。在默认类中,
String
is不存在,但您可以自己轻松实现它:

class String

    # converts to array of chars
    def to_a
        ret = []
        self.each_char do |c|
            ret.push c
        end
        return ret
    end

    # given two numeric strings,
    # returns the bitwise xor string
    def ^(s)
        aa = self.to_a
        ab = s.to_a
        lc = (aa.count < ab.count) ? aa.count : ab.count
        ret = ""
        lc.times do |i|
            x = aa[i].to_i ^ ab[i].to_i
            ret = ret + x.to_s
        end
        return ret
    end

end
类字符串
#转换为字符数组
def to_a
ret=[]
self.u char do|c|
再推
结束
回程网
结束
#给定两个数字字符串,
#返回按位异或字符串
定义^(s)
aa=自对a
ab=s.to_a
lc=(aa计数
这只是一个例子,还没有经过测试



如果我要在执行逐位异或之前将每个字节转换为二进制。我该怎么做

好的,您想看看或,然后用这些方法实现上面的代码。

成字节,压缩在一起,映射xor,re-

放入字节,压缩在一起,映射xor,re-


如果我要在执行逐位异或之前将每个字节转换为二进制。我该怎么做?@user1428829,请参见编辑。您能告诉我如何使用字符串#字节或字符串#每个#字节进行编辑吗。对不起,我是新手!如果在执行逐位异或运算之前将每个字节转换为二进制,我会非常感激。我该怎么做?@user1428829,请参见编辑。您能告诉我如何使用字符串#字节或字符串#每个#字节进行编辑吗。对不起,我是新手!非常感谢你,汉克斯!我希望结果是:“0123456789ABCDEFFEDCBA9876543210”。您知道如何从两个输入字符串s1和s2中获取该值吗。谢谢,这不是您想要的字符的按位异或。你想要什么还不完全清楚。要获得所需的字符串,您只需执行
s1.upcase
,但这当然不涉及
s2
。你能不能把这个问题改成一个非常重要的
s2
,这样你就可以更清楚地知道你在搜索什么函数了。谢谢!我希望结果是:“0123456789ABCDEFFEDCBA9876543210”。您知道如何从两个输入字符串s1和s2中获取该值吗。谢谢,这不是您想要的字符的按位异或。你想要什么还不完全清楚。要获得所需的字符串,您只需执行
s1.upcase
,但这当然不涉及
s2
。你能不能把这个问题改成一个非常重要的
s2
,这样你就可以更清楚地知道你在搜索什么函数了。