我试图在 python 中附加一些十六进制值,我似乎总是在数字之间得到 0x。根据我的搜索,如果不将其转换为一系列值,这是不可能的?我不知道。
a = 0x7b
b = 0x80000
hex(a) + hex(b) = 0x7b0x80000
我不想要中间的 0x - 我需要0x7b80000
. 有没有其他方法可以做到这一点?如果我转换为整数,我会得到两者的总和,并将其转换为十六进制是一个不同的值0x7b80000
我认为您不想“附加”它们。使用字符串进行整数运算是个坏主意。我认为您想移位a
到正确的位置并将它们组合在一起:
>>> a = 0x7B
>>> b = 0x80000
>>>
>>> hex( (a<<20) | b )
'0x7b80000'
也许如果您更具体地了解这些数字是什么以及您到底想要完成什么,我可以提供一个更笼统的答案。
这是一种更通用的追加hex
//值的方式int
。
仅适用于 的正值。bin
b
a = 0x7b
b = 0x80000
def append_hex(a, b):
sizeof_b = 0
# get size of b in bits
while((b >> sizeof_b) > 0):
sizeof_b += 1
# align answer to nearest 4 bits (hex digit)
sizeof_b += sizeof_b % 4
return (a << sizeof_b) | b
print(hex(append_hex(a, b)))
基本上你必须找到最高的设置位b
。
将该数字与 的最高倍数对齐,4
因为这就是hex
字符。
将 附加a
到之前找到的 4 的最大倍数的前面。
已经 7 年了,但接受的答案是错误的,这篇文章仍然出现在谷歌搜索的首位;所以这是一个正确的答案:
import math
def append_hex(a, b):
sizeof_b = 0
# get size of b in bits
while((b >> sizeof_b) > 0):
sizeof_b += 1
# every position in hex in represented by 4 bits
sizeof_b_hex = math.ceil(sizeof_b/4) * 4
return (a << sizeof_b_hex) | b
接受的答案没有意义(您可以使用值 a=10,b=1a 来检查它)。在这个解决方案中,我们搜索最接近的 4 分频器——因为每个十六进制值都由 4 位表示——然后在这次位中移动第一个值。
您可以在 Python 3 中使用 f 字符串格式:
>>> a = 0x7b
>>> b = 0x80000
>>> f'0x{a:x}{b:x}'
'0x7b80000'