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

2024-10-02 14:28:38 发布

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

我正在visualstudio代码中使用donjayamanne的Python扩展在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):

Tags: 函数代码脚本内容messagelen字节windows
1条回答
网友
1楼 · 发布于 2024-10-02 14:28:38

这听起来像是Python2中的一个奇怪的东西,在Python3中被修复了。你知道吗

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'

当Python2.6被提议时,我回头阅读了PEP中的字节:

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

它清楚地说明了建造师:

初始值设定项参数可以是字符串(在2.6中,可以是str或unicode)、整数的可数或单个整数。你知道吗

也许这是Python中的一个bug。或者在列表和字符串之间有一些类似python的东西我在这里丢失了。你知道吗

相关问题 更多 >