求负数的2的补码的十六进制

2024-09-30 01:19:58 发布

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

我试图将一个整数转换成一个字节字符串数组。在

def int2Hex():
    hex = '%08x' % 32
    bytes = []

    for i in range(0,4):
        bytes.append('0x' + hex[i*2: i*2 + 2])

    return bytes[::-1] #return in little endian

上面的代码适用于正数:['0x00', '0x00', '0x00', '0x20']

但是当我使用负数时,我会得到这样的结果:['0x-0', '0x00', '0x00', '0x20']

我想要的负数是2的补码字节。我使用的是python2。在


Tags: 字符串inforreturn字节bytesdefrange
2条回答

如果您确保转换后的数字始终为正,然后屏蔽底部的32位,则您的方法可以工作。在

代码:

OFFSET = 1 << 32
MASK = OFFSET - 1

def int2Hex(num):
    hex = '%08x' % (num + OFFSET & MASK)
    bytes = []

    for i in range(0, 4):
        bytes.append('0x' + hex[i * 2: i * 2 + 2])

    return bytes[::-1]  # return in little endian

print(int2Hex(20))
print(int2Hex(-20))

结果:

^{pr2}$

您可以使用这个:

def int2hex(number, bits):
    """ Return the 2'complement hexadecimal representation of a number """

    if number < 0:
        return hex((1 << bits) + number)
    else:
        return hex(number)

希望你觉得有用!在

相关问题 更多 >

    热门问题