首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby语言中的DWord操作

Ruby语言中的DWord操作
EN

Stack Overflow用户
提问于 2011-10-06 17:33:20
回答 3查看 674关注 0票数 0

我正在寻找使用Ruby在DWord中转换字节值数组的方法。

举例: 255,1,255,2 -> 11111111 00000001 11111111 000000010

然后我需要一种方法来处理这个DWord中的任何字节(或字)并执行逐位操作。

有没有人能建议一种方法,将4字节数组转换为DWord,然后访问结果DWord中的字节?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-07 18:53:29

您可以将您的逻辑封装在类中。下面是一个精简的示例(需要添加边界和错误检查)。

代码语言:javascript
复制
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等执行类似的操作。上面的操作将允许您执行以下操作:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 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位运算符一章

票数 0
EN

Stack Overflow用户

发布于 2011-10-06 18:20:17

首先,要将的数组转换为漂亮的字符串,您可以这样做:

代码语言:javascript
复制
puts [255,1,255,2].map{|val| val.to_s(2).rjust(8, '0')}.join(' ')

对于二进制操作来说,这是非常简单的。它使用基于C的运算符:

代码语言:javascript
复制
OR => 1 | 2 = 3
AND => 1 & 2 = 0
XOR => 1 ^ 3 = 2 

您不应该对bitwise operations使用字符串...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7672494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档