【发布时间】:2011-03-12 18:03:30
【问题描述】:
我正在尝试返回一个字节数组,其中包含 Bignum 或 Fixnum(在 Ruby 中)的二进制补码表示。 Java 中有一个方法可以做到这一点 - 文档:Java toByteArray() method,代码:https://gist.github.com/867409
我的要求与 Java 方法(取自 Java 页面)相同:字节数组将采用 big-endian 字节顺序:最高有效字节位于第零个元素中。该数组将包含表示此 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
【问题讨论】:
-
我认为您应该能够通过在 Ruby 中使用
>>获得相同的结果。你试过吗? -
不一样。 >>> 是无符号右移运算符,>> 是有符号的。
-
啊,你是对的。这是 Java 的逻辑右移。
-
附带说明,如果您确实尝试实现此功能,那么如果您发布具有预期输出的非工作代码将会很有帮助。
-
你也需要这个来处理负数吗?这是您正在寻找的输出之王吗? ideone.com/nvFKC