在轨道上的ruby上使用按位AND和字符串

时间:2014-03-25 14:56:53

标签: ruby operators bit-manipulation bitwise-operators bitwise-and

我想使用按位运算符"&"用这样的字符串:

 raw_counter_int = raw_counter.to_i
 raw_counter_bin = raw_counter_int.to_s(2)
 u = (2**62 + 2**63)
 k = u.to_s(2)
 r =  raw_counter_bin & k
 @counter_msg = r

但是当我运行我的应用程序时,我发现了以下错误消息:

undefined method `&' for "10000000000000000000000000000000000000000000000000000000":String

我如何使用此运营商"&"用raw_counter_int和u转换成二进制文件?

我试试这个:0000 0000 1000 0000 0000 0000 0000 0000(64位)到  取第三个字节和第10个字节之间的字节。所以我想做一个  按位"&" 0000 0000 1000 0000 0000 0000 0000 0000& 0011 1111  1100 0000 0000 0000 0000 0000取此:00 0000 10

1 个答案:

答案 0 :(得分:0)

  

我试试这个:0000 0000 1000 0000 0000 0000 0000 0000(64位)到   取第三个字节和第10个字节之间的字节。所以我想做一个   按位"&" 0000 0000 1000 0000 0000 0000 0000 0000& 0011 1111   1100 0000 0000 0000 0000 0000取此:00 0000 10

我们这样做:

("00000000100000000000000000000000".to_i(2) & "00111111110000000000000000000000".to_i(2)).to_s(2)
=> "100000000000000000000000"

这正是预期的!错误("10000000000000000000000000000000000000000000000000000000")中显示的数字是2^56,当使用按位AND时,2^62+2^63 期望给出零结果。 ..

我建议您再次检查输入,并相信ruby的&来完成这项工作......