为什么Python' len'函数夸大字节数组的长度?

时间:2017-05-05 15:05:02

标签: python

我使用Don Jayamanne的Python扩展在Visual Studio Code中在Windows上开发Python脚本。这是我的手表的内容'调试窗口:

VSCode screenshot

字节数组someBytes的长度是20,但Python的len函数使它成为77.为什么?

因此生成数组:

def sendTouchDown(ble):
    message = bytes([0x01, 0x68, 0x03, 0x39, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])
    if ble:
        sendMuxBle(message)
    else:
        sendMuxRfcomm(message)

然后测量它的长度:

def sendMuxRfcomm(someBytes):
    crc = 0xFFFF
    for i in range(0, len(someBytes), 2):

1 个答案:

答案 0 :(得分:1)

这听起来像是Python 3中修复过的那些奇怪的东西之一。

bytes构造函数将传递任何非字符串并将其转换为字符串。因此,您的陈述在逻辑上等同于此:

thelist = [0x01, 0x68, 0x03, 0x39, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
message = bytes(str(thelist))

创建一个像这样的字节文字:

message = b'\x01\x68\x03\x39\x05\x01\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF'

当我为Python 2.6提议时,我回去阅读PEP的字节:

https://www.python.org/dev/peps/pep-0358/

它清楚地说明了构造函数:

初始化参数可以是字符串(在2.6中,str或unicode),可迭代的整数,或单个整数。

也许这是Python中的一个错误。或者我在这里找不到列表和字符串之间的Pythonic。