对带有ruby的字符串的按位运算

时间:2010-05-02 18:17:44

标签: ruby bitwise-operators

如何在ruby中对字符串执行按位运算? 我想bitwise &一个带有4字节长十六进制的4字节字符串,例如("abcd" & 0xDA2DFFD3)。我无法获取字符串的字节值。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

如果您总是要使用4字节字符串进行操作,String#unpack参数为'V'将以小端字节顺序将四个字节视为无符号长整数。使用'N'将强制网络字节顺序,使用'L'将使用本机顺序。请注意,unpack始终返回一个数组,因此需要采用索引0。

>> '0x%X' % ('abcd'.unpack('V')[0] & 0xDA2DFFD3)
=> "0x40216241"

如果它不总是四个字节,你可以调用String#bytes来获取字符串的字节,然后你可以使用Enumerable#inject将字节累加到一个数字中。

>> "abcd".bytes.inject {|x, y| (x << 8) | y}
=> 1633837924
>> "abcd".bytes.inject {|x, y| (x << 8) | y}.to_s(16)
=> "61626364"
>> "abcd".bytes.inject {|x, y| (x << 8) | y} & 0xDA2DFFD3
=> 1075864384
>> "0x%X" % ("abcd".bytes.inject {|x, y| (x << 8) | y} & 0xDA2DFFD3)
=> "0x40206340"

只要您使用ASCII字符串,这就是“安全”。如果你开始使用多字节字符串,你将得到“奇怪”的结果。