Операции с DWord в Ruby - PullRequest
       2

Операции с DWord в Ruby

0 голосов
/ 06 октября 2011

Я ищу способы преобразования массива байтовых значений в DWord с использованием Ruby.

Например: [255,1,255,2] -> 11111111 00000001 11111111 000000010

Итогда мне нужен способ работать с любым байтом (или словом) из этого DWord и выполнять побитовые операции.

Может кто-нибудь предложить метод преобразования 4-байтового массива в DWord и последующего доступа к байту в полученном DWord?

Ответы [ 3 ]

0 голосов
/ 06 октября 2011

Сначала, чтобы преобразовать массив в в красивую строку, вы можете сделать это:

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 

Вы не должны использовать строки для побитовых операций ...

0 голосов
/ 07 октября 2011

Вы можете инкапсулировать свою логику в классах. Вот упрощенный пример (необходимо добавить проверку границ и ошибок).

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   
0 голосов
/ 06 октября 2011

вы можете использовать

"101" .to_i (2) => 5

и

5.to_s (2) => "101"

конвертировать в другие базы довольно легко (база - аргумент)

См http://www.ruby -doc.org / ядро ​​/ классов / String.html # M000802

Для битовых операций с вашими номерами

См http://www.tutorialspoint.com/ruby/ruby_operators.htm

И проверьте главу Рубиновые побитовые операторы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...