Ruby - 返回包含Bignum/Fixnum的两个补码表示的字节数组

ben*_*sie 3 ruby bytearray

我正在尝试返回一个包含Bignum或Fixnum(在Ruby中)的二进制补码表示的字节数组.在Java中有一种方法可以完全实现 - Docs:Java toByteArray()方法,代码为:https://gist.github.com/867409

我的要求与Java方法相同(取自Java页面):字节数组将采用big-endian字节顺序:最重要的字节位于第0个元素中.该数组将包含表示此BigInteger所需的最小字节数,包括至少一个符号位,即(ceil((this.bitLength() + 1)/8)).

Ruby没有>>>运算符(我认为)是为什​​么我有这么多问题将这个概念转换为Ruby.

添加一些不工作的代码:

def to_byte_array(num)
  result = []
  until num == 0
    result = [num & 0xff] + result
    num = num >> 8
  end
  result
end
Run Code Online (Sandbox Code Playgroud)

Mar*_*une 5

结束条件有点棘手.在这里:

def to_byte_array(num)
  result = []
  begin
    result << (num & 0xff)
    num >>= 8
  end until (num == 0 || num == -1) && (result.last[7] == num[7])
  result.reverse
end

p [0, 1, 255, 256, -1, -128, -256].map{|i| to_byte_array(i)}
# => [[0], [1], [0, 255], [1, 0], [255], [128], [255, 0]]
Run Code Online (Sandbox Code Playgroud)