gpt4 book ai didi

python - 如何使用 struct.pack 格式构造字节?

转载 作者:行者123 更新时间:2023-12-04 09:45:22 25 4
gpt4 key购买 nike

背景

我正在使用 python-seabreeze与光谱仪交谈。一些,但不是所有可用的命令都在 python-seabreeze 中实现。我可以从 OceanOptics Flame-T manual 看到有以下命令(例如):

.
.
0x09 Request Spectra
0x0A Set Trigger Mode
0x0B Query number of Plug-in Accessories Present
0x0C Query Plug-in Identifiers
0x0D Detect Plug-ins
0x12 LED Status
0x60 General I2C Read
0x61 General I2C Write
0x62 General SPI I/O
0x68 PSOC Read
0x69 PSOC Write
0x6A Write Register Information
0x6B Read Register Information
0x6C Read PCB Temperature
0x6D Read Irradiance Calibration
.
.

来自 seabreeze/pyseabreeze/protocol.py我可以看到这些命令是这样形成的:

import functools
import struct

msgs = {
code: functools.partial(struct.Struct(msg).pack, code)
for code, msg in {
0x01: "<B", # OP_INITIALIZE
0x02: "<BI", # OP_ITIME
0x03: "<BH", # set Strobe/Lamp enable Line
0x05: "<BB", # OP_GETINFO
0x09: "<B", # OP_REQUESTSPEC
0x0A: "<BH", # OP_SETTRIGMODE
0x6A: "<BBH", # OP_WRITE_REGISTER
0x6B: "<BB", # OP_READ_REGISTER
0x71: "<BBB", # OP_TECENABLE_QE
0x72: "<B", # OP_READTEC_QE
0x73: "<Bh", # OP_TECSETTEMP_QE
0xFE: "<B", # OP_USBMODE
}.items()
} # add more here if you implement new features

例如, Request Spectra ,根据手册是 0x09 ,当它来自python时,一条消息
struct.Struct('<B').pack(0x09)

已发送。我试图通过阅读 struct format strings 来了解正在发生的事情。 ,我发现 <表示“小端”, B表示无符号字符, h表示短等

问题

如何从手册中知道 OP_GETINFO 的格式是 <BB , 而对于 OP_WRITE_REGISTER它是 <BBH ?这里的逻辑是什么? 0x6C Read PCB Temperature 的格式你会怎么写?为什么?

最佳答案

似乎您需要阅读需要使用哪些参数才能发送合法命令,该协议(protocol)仅定义了您希望发送的一些项目,例如:

code_partial_function = functools.partial(struct.Struct(msg).pack, code)
...
0x6B: "<BB", # OP_READ_REGISTER
...

# used like this later:
# example for register number 1
# final_packed_bytes will contain both the operation id and the register number
final_packed_bytes = code_partial_function(0x1)

对于此操作读取寄存器,protocol.py 将创建一个已包含操作 id (0x6b) 的部分函数,​​并要求您提供额外的“B”,表示另一个无符号字符,可能是您希望读取的寄存器编号。

该协议(protocol)仅提供 ID 作为 pack 函数的第一个输入,而将其余值留给用户。
每个操作在操作 id 之后需要不同的值,有些需要更多(“BBH”),有些需要更少(“B”)。

对于 0x6c,我会搜索格式并从那里了解我还剩下什么来提供这个包功能。

关于python - 如何使用 struct.pack 格式构造字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62152603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com