Вы можете инкапсулировать свою логику в классах. Вот упрощенный пример (необходимо добавить проверку границ и ошибок).
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