对带有ruby的字符串的按位操作
如何在ruby中对字符串执行按位运算? 我想做bitwise &
一个4字节长的hex字符串,如("abcd" & 0xDA2DFFD3)
。 我无法获取字符串的字节值。 谢谢你的帮助。
如果您总是要使用4字节字符串进行操作,则使用参数'V'
String#unpack
将以小端字节顺序将四个字节视为无符号长整数。 使用'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字符串,这是“安全的”。 如果你开始使用多字节字符串,你将得到“奇怪”的结果。