在python中使用16b十六进制的数学运算

问题描述 投票:0回答:1

我有一个开始十六进制:“00000000FFFFFFFF000000000AF50AF5”这个我要执行一些操作。 用户输入一个int值(例如20)。 程序执行:输入* 100。 (= 2000) 将其转换为“Hex Little Endian”(= D0070000) 用这个新的4字节替换前4字节(00000000):( = D0070000FFFFFFFF000000000AF50AF5) 直到这里它很好!问题现在开始了。 在4字节(00000000)的第三个位置替换相同的十六进制(= D0070000):( = D0070000FFFFFFFFD00700000AF50AF5) 最后将相同的十六进制(= D0070000)减去4字节的第二个位置(FFFFFFFF):( = 2FF8FFFF) 最终十六进制:“D00700002FF8FFFFD00700000AF50AF5”

我不明白如何向我的程序提及4字节(1,2,3或4)的替换位置。

user_int_value=int(input("enter num: "))*100 #user input*100
start_hex=bytes.fromhex("00000000FFFFFFFF000000000AF50AF5") #Starting hex
num_tot=hex(int.from_bytes(user_int_value.to_bytes(16, 'little'), 'big')) #convert user input to hex in little endian
sum = hex(int('0xFFFFFFFF', 16) - int(num_tot, 16)) #substract same hex to "0xFFFFFFFF"

EDIT

更简单地说,我想结合4bytes:

data = ["0xD0070000", "0x2FF8FFFF", "0xD0070000", "0x0AF50AF5"]

最终结果我想要“0xD00700002FF8FFFFD00700000AF50AF5”

python math hex
1个回答
0
投票

试试这个:

data = ["0xD0070000", "0x2FF8FFFF", "0xD0070000", "0x0AF50AF5"]
output = hex(int(data[0], 16) << 96 | int(data[1], 16) << 64 | int(data[2], 16) << 32 | int(data[3], 16) << 0)

输出应该成为0xd00700002ff8ffffd00700000af50af5

在某些情况下,您将无法获得预期的输出,因为前导零将被切断,在这种情况下,您可以手动填充零:

print(f"0x{output[2:].zfill(32)}") # Uses f-string (requires newer python versions)

要么

print("0x{}".format(output[2:].zfill(32))) # uses the old python format's string method
© www.soinside.com 2019 - 2024. All rights reserved.