Python中的tobyterarray?

2024-04-20 05:20:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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个元素中。在

如何在Python2.7中做到这一点? 因为字节范围是0<;=byte<;=255 e、 g

^{pr2}$

结果我得到:

list = [3, -24]

Tags: ofltnew字节contentsmath数组java
3条回答

user189's answer几乎是正确的。有时^{}会在结果中添加额外的零字节。这里有一个更正确的解决方案:

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))

如果我正确地理解了你想要什么,这样的事情可能会奏效。在

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

使用^{}^{}

>>> 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获得任意长度的字节数组。在

相关问题 更多 >