亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用struct.pack格式構造字節?

如何使用struct.pack格式構造字節?

蝴蝶刀刀 2022-12-20 15:18:48
背景我正在使用python-seabreeze與光譜儀交談。一些但不是所有可用命令都在 python-seabreeze 中實現。從OceanOptics Flame-T手冊中可以看到有如下命令(舉例):..0x09 Request Spectra0x0A Set Trigger Mode0x0B Query number of Plug-in Accessories Present0x0C Query Plug-in Identifiers0x0D Detect Plug-ins0x12 LED Status0x60 General I2C Read0x61 General I2C Write0x62 General SPI I/O0x68 PSOC Read0x69 PSOC Write0x6A Write Register Information0x6B Read Register Information0x6C Read PCB Temperature0x6D Read Irradiance Calibration..從seabreeze/pyseabreeze/protocol.py我可以看到這些命令是這樣形成的:import functoolsimport 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是?這是什么邏輯?你會把什么格式和為什么?<BBOP_WRITE_REGISTER<BBH0x6C Read PCB Temperature
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊


似乎您需要閱讀需要使用哪些參數才能發送合法命令,該協議僅定義了您希望發送的一些項目,例如:


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”,表示另一個無符號字符,可能是您希望讀取的寄存器編號。


該協議僅提供 ID 作為 pack 函數的第一個輸入,而將其余值留給用戶。每個操作在操作 ID 后需要不同的值,有些需要更多(“BBH”),有些需要更少(“B”)。


對于 0x6c,我會搜索格式并從那里了解我還剩下什么來提供這個包功能。


查看完整回答
反對 回復 2022-12-20
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號