今天写代码的时候忘记了这行代码的作用
message.extend(register_addr.to_bytes(2, 'big'))
这篇文章着重讲解
to_bytes()
方法
to_bytes()
是 Python 中整数对象的一个方法,用于将整数转换为指定长度和字节序的字节对象。它的语法如下:
python
int.to_bytes(length, byteorder, *, signed=False)
- 参数解释:
length
:指定要转换的字节长度,即最终生成的字节对象的长度。这里传入的是2
,意味着会将register_addr
转换为 2 个字节(16 位)的字节对象。如果register_addr
的值超出了 2 个字节所能表示的范围(对于无符号整数,范围是 0 到 65535),会抛出OverflowError
异常。byteorder
:指定字节序,即字节的排列顺序。它有两个常用的值:'big'
:表示大端字节序(Big Endian)。在大端字节序中,最高有效字节(MSB,Most Significant Byte)位于字节序列的最前面,最低有效字节(LSB,Least Significant Byte)位于字节序列的最后面。例如,对于整数0x1234
,在大端字节序下,它的字节表示为[0x12, 0x34]
。'little'
:表示小端字节序(Little Endian)。在小端字节序中,最低有效字节位于字节序列的最前面,最高有效字节位于字节序列的最后面。例如,对于整数0x1234
,在小端字节序下,它的字节表示为[0x34, 0x12]
。
signed
(可选参数):指定整数是否为有符号整数,默认为False
,表示无符号整数。
register_addr
是一个整数类型的变量,它代表着寄存器地址。现在再来看这一行message.extend(register_addr.to_bytes(2, 'big'))
再结合语法
int.to_bytes(length, byteorder, *, signed=False)
再加上个例子
示例代码
python
# 假设 register_addr 是一个寄存器地址
register_addr = 0x1234
# 初始化一个空列表作为 message
message = []
# 将 register_addr 转换为 2 字节的大端字节序表示,并添加到 message 列表中
message.extend(register_addr.to_bytes(2, 'big'))
print(message) # 输出: [18, 52],因为 0x12 十进制是 18,0x34 十进制是 52
它主要是完成将整数转换为字节并添加到列表中的操作。