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

标签 ruby bitwise-operators

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

最佳答案

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

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

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

关于ruby - 使用 ruby​​ 对字符串进行按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754449/

相关文章:

JavaScript trunc() 函数

ruby - 是否可以在 Ruby 中声明类型?

Ruby 哈希数组;只保留包含特定键=>值对的第一个元素

ruby - 动态创建类方法

c++ - 将 char* 数组合并到 uint16_t

c - 用条件循环每个数字的最快方法

c++ - 一致性哈希 SHA1 模运算

mysql - 在 ruby​​ 中运行 rake import 任务时内存不足

ruby-on-rails - 新列未保存在 rails form_for 中

位运算符可以有未定义的行为吗?