将2个整数转换为十六进制/字节数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将2个整数转换为十六进制/字节数组?相关的知识,希望对你有一定的参考价值。

我正在使用Python通过SPI传输两个整数(范围0 ... 4095)。该软件包似乎期望以[0xff,0xff,0xff]的形式出现一个字节数组。所以例如1638(十六进制:666)和1229(十六进制:4cd)应该产生[0x66,0x64,0xcd]。那么有效转换看起来像中间的混合字节似乎非常讨厌?

答案

您可以通过左移,然后将两个12位值按位“或”运算并使用下面显示的int_to_bytes()函数来完成,这将在Python 2.x中起作用。

在Python 3中,int类型有一个名为to_bytes()的内置方法,可以执行此操作以及更多,因此在该版本中您不需要提供自己的。

def int_to_bytes(n, minlen=0):
    """ Convert integer to bytearray with optional minimum length. 
    """
    if n > 0:
        arr = []
        while n:
            n, rem = n >> 8, n & 0xff
            arr.append(rem)
        b = bytearray(reversed(arr))
    elif n == 0:
        b = bytearray(b'x00')
    else:
        raise ValueError('Only non-negative values supported')

    if minlen > 0 and len(b) < minlen: # zero padding needed?
        b = (minlen-len(b)) * 'x00' + b
    return b

a, b = 1638, 1229  # two 12 bit values
v = a << 12 | b  # shift first 12 bits then OR with second
ba = int_to_bytes(v, 3)  # convert to array of bytes
print('[{}]'.format(', '.join(hex(b) for b in ba)))  # -> [0x66, 0x64, 0xcd]

以上是关于将2个整数转换为十六进制/字节数组?的主要内容,如果未能解决你的问题,请参考以下文章

将二进制字符串转换为字节数组

在 Python 中将整数转换为 2 字节的十六进制值

是否可以将字符串转换为二进制表示的字节数组

将可变大小的字节数组转换为整数/长整数

需要将字节数组/二进制消息从 UDP DatagramPacket 转换为 java 中的几个字段

怎么把一个整数转化为3个十六进制字节 delphi