8

我试图在 python 中附加一些十六进制值,我似乎总是在数字之间得到 0x。根据我的搜索,如果不将其转换为一系列值,这是不可能的?我不知道。

a = 0x7b
b = 0x80000
hex(a) + hex(b) = 0x7b0x80000

我不想要中间的 0x - 我需要0x7b80000. 有没有其他方法可以做到这一点?如果我转换为整数,我会得到两者的总和,并将其转换为十六进制是一个不同的值0x7b80000

4

4 回答 4

5

我认为您不想“附加”它们。使用字符串进行整数运算是个坏主意。我认为您想移位a到正确的位置并将它们组合在一起:

>>> a = 0x7B
>>> b = 0x80000
>>>
>>> hex( (a<<20) | b )
'0x7b80000'

也许如果您更具体地了解这些数字是什么以及您到底想要完成什么,我可以提供一个更笼统的答案。

于 2013-03-26T04:34:14.943 回答
3

这是一种更通用的追加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 的最大倍数的前面。

于 2013-03-26T04:50:01.190 回答
3

已经 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 位表示——然后在这次位中移动第一个值。

于 2020-08-03T18:12:06.483 回答
1

您可以在 Python 3 中使用 f 字符串格式:

>>> a = 0x7b
>>> b = 0x80000
>>> f'0x{a:x}{b:x}'
'0x7b80000'
于 2021-04-19T20:42:25.003 回答