如何在 ruby 中对字符串执行按位运算?我想做bitwise &
一个 4 字节长的十六进制字符串,例如("abcd" & 0xDA2DFFD3)
. 我无法获取字符串的字节值。谢谢你的帮助。
问问题
3602 次
1 回答
3
如果您总是要对 4 字节字符串进行操作,则String#unpack
使用参数'V'
会将四个字节视为小端字节序中的无符号长整数。using'N'
将强制网络字节顺序,而 using'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 字符串,这是“安全的”。如果你开始使用多字节字符串,你会得到“奇怪”的结果。
于 2010-05-02T18:22:42.713 回答