gpt4 book ai didi

Ruby 按位异或 2 相同长度的 ascii 字符串

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:05 25 4
gpt4 key购买 nike

我正在尝试在 ruby​​ 中对相同长度的 2 个 ASCII 字符串进行按位异或运算。我得出以下结论:

'A'.unpack('B*').zip('B'.unpack('B*')).map{|a, b| (a.to_i ^ b.to_i).to_s}.pack('b*')
=> "\003"

它有效。然而,当执行 2 个或更多字符的字符串时,它表现得很奇怪,我认为是因为 Fixnum 的值太大了,见下文:

'AA'.unpack('B*').zip('BB'.unpack('B*')).map{|a, b| (a.to_i ^ b.to_i).to_s}.pack('b*')
=> "_\003"

如果我在 xor 之后停止,没有 to_s 部分,我发现它没有正确执行按位 XOR:

'AA'.unpack('B*').zip('BB'.unpack('B*')).map{|a, b| (a.to_i ^ b.to_i)}
=> [1515925259]

有人可以帮忙吗?或者有人可以建议另一种方法吗?非常感谢

最佳答案

我想你想用C(8位无符号)而不是B(位串)来unpack,因为异或运算符^ 对数字而不是字符串进行操作:

'AA'.unpack('C*').zip('BB'.unpack('C*')).map { |a,b| a^b }.pack('C*')
# => "\x03\x03"

3 是 65 ('A') 与 66 ('B') 的异或运算结果。

关于Ruby 按位异或 2 相同长度的 ascii 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22414411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com