BigInteger i = new BigInteger("1000");
Byte[] arr = i.toByteArray();
Contents of arr: [3, -24]
由于java中的字节范围是:最小-128,最大值127(包括)。
java.math.BigInteger.toByteArray()
返回一个包含此BigInteger的两个补码表示的字节数组。字节数组将采用big-endian字节顺序:最重要的字节位于第0个元素中。
我如何在python 2.7中执行此操作? 由于字节范围为0 <= byte&lt; = 255 e.g。
x = 1000
list = doTheMagic(x)
因此我得到了:
list = [3, -24]
答案 0 :(得分:2)
>>> struct.unpack('2b', struct.pack('>h', 1000))
(3, -24)
>>> struct.unpack('4b', struct.pack('>I', 1000))
(0, 0, 3, -24)
>>> struct.unpack('8b', struct.pack('>Q', 1000))
(0, 0, 0, 0, 0, 0, 3, -24)
不幸的是,您无法使用struct.pack
/ struct.unpack
获得任意长度的字节数组。
答案 1 :(得分:0)
如果我理解了你想要的东西,那样的东西可以解决问题。
def doTheMagic(x):
l = []
while x:
m = x%256
l.append(m if m <=127 else m-256)
x /= 256
return l[::-1]
x = 1000
l = doTheMagic(x)
print l
答案 2 :(得分:0)
user189's answer几乎是正确的。有时BigInteger.toByteArray()
会在其结果中添加额外的零字节。这是一个更正确的解决方案:
def to_byte_array(num):
bytea = []
n = num
while n:
bytea.append(n % 256)
n //= 256
n_bytes = len(bytea)
if 2 ** (n_bytes * 8 - 1) <= num < 2 ** (n_bytes * 8):
bytea.append(0)
return bytearray(reversed(bytea))