我正在寻找使用Ruby在DWord中转换字节值数组的方法。
举例: 255,1,255,2 -> 11111111 00000001 11111111 000000010
然后我需要一种方法来处理这个DWord中的任何字节(或字)并执行逐位操作。
有没有人能建议一种方法,将4字节数组转换为DWord,然后访问结果DWord中的字节?
发布于 2011-10-07 18:53:29
您可以将您的逻辑封装在类中。下面是一个精简的示例(需要添加边界和错误检查)。
class Byte
attr_accessor :value
def initialize(integer)
@value = integer
end
def to_s
value.to_s(2).rjust(8,"0")
end
end
class DWord
attr_accessor :bytes
def initialize(*byte_list)
@bytes = []
byte_list.each do |b|
@bytes << Byte.new(b)
end
end
def to_s
@bytes.map(&:to_s).join(' ')
end
end您可以对Word、QWord等执行类似的操作。上面的操作将允许您执行以下操作:
dword = DWord.new(255,1,255,2)
puts dword
# 11111111 00000001 11111111 00000010
dword.bytes.each do |b|
puts "#{b.value} = #{b}"
end
# 255 = 11111111
# 1 = 00000001
# 255 = 11111111
# 2 = 00000010 发布于 2011-10-06 17:41:33
您可以使用
"101".to_i(2) => 5
和
5.to_s(2) => "101"
非常容易地转换为其他基数(基数是参数)
请参阅http://www.ruby-doc.org/core/classes/String.html#M000802
对于数字的位运算,
请参阅http://www.tutorialspoint.com/ruby/ruby_operators.htm
并查看Ruby位运算符一章
发布于 2011-10-06 18:20:17
首先,要将的数组转换为漂亮的字符串,您可以这样做:
puts [255,1,255,2].map{|val| val.to_s(2).rjust(8, '0')}.join(' ')对于二进制操作来说,这是非常简单的。它使用基于C的运算符:
OR => 1 | 2 = 3
AND => 1 & 2 = 0
XOR => 1 ^ 3 = 2 您不应该对bitwise operations使用字符串...
https://stackoverflow.com/questions/7672494
复制相似问题