在python中拆分十六进制的最佳方法?

2024-04-27 04:44:09 发布

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

一般来说,我对十六进制还不太熟悉,我有一个应用程序需要我拆分一个十六进制数。例如,给定数字0x607F,我需要返回高(0x60)或低(0x7F)字节。

这是五月的实现,虽然感觉有点像克隆。在python中是否有更标准的方法来实现这一点?

def byte(integer,highlow):
    assert highlow=='high' or highlow=='low'
    if highlow=='high':
        return hex(int(bin(integer)[:-8],2))
    if highlow=='low':
        return hex(int(bin(integer)[-8:],2))

Tags: 方法应用程序标准returnif字节bin数字
3条回答

这将以元组的形式返回高字节和低字节:

def bytes(integer):
    return divmod(integer, 0x100)

例如:

>>> high, low = bytes(0x607F)
>>> hex(high)
'0x60'
>>> hex(low)
'0x7f'

顺便说一句,根据您需要字节的用途和整数的来源,可能有更好的方法来满足您的需要。

再加上Ned的回答是非常正确的,struct是提取字节的强大工具。

>>> import struct
>>> print("0x%2x 0x%2x\n" % tuple(struct.pack('<H',0x4355)))
0x55 0x43

在本例中,“<;”告诉pack将输入解释为little-endian,“H”表示期望2字节的数字。Struct生成一个bytes对象(在Python 3上),然后可以将其转换为元组,以满足%x打印十六进制的字符串格式参数。

Python 2.7稍微麻烦一些,只是因为struct.pack将信息放在一个字符串中,该字符串必须是split into its characters

>>> print("0x%2x 0x%2x\n" % tuple([ ord(x) for x in struct.pack('<H',0x4355)]))
0x55 0x43

如果你真的在做一件像这个例子一样简单的事情,那可能是过分了。如果你正在从一个微控制器中观察到更多的值或不同长度的数字,或者用C或C++交换数据,考虑使用Stutt使字节更容易发生扭曲。

def bytes(num):
    return hex(num >> 8), hex(num & 0xFF)

bytes(0x607F)

收益率

('0x60', '0x7f')

相关问题 更多 >