获取负数的 2 的十六进制补码
Get the hex of 2's complement for negative numbers
我正在尝试将整数转换为字节字符串数组。
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的补码字节。我正在使用 python 2.
你可以使用这个:
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)
希望对你有用!
如果您确保转换后的数字始终为正数,然后屏蔽低 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))
结果:
['0x14', '0x00', '0x00', '0x00']
['0xec', '0xff', '0xff', '0xff']
我正在尝试将整数转换为字节字符串数组。
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的补码字节。我正在使用 python 2.
你可以使用这个:
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)
希望对你有用!
如果您确保转换后的数字始终为正数,然后屏蔽低 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))
结果:
['0x14', '0x00', '0x00', '0x00']
['0xec', '0xff', '0xff', '0xff']