使用 ruby​​ 对字符串进行按位运算

2023-11-29

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


如果您总是要操作 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 字符串,这就是“安全”的。如果您开始使用多字节字符串,您将得到“奇怪”的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ruby​​ 对字符串进行按位运算 的相关文章

随机推荐