[英]How do I get my returned data to format through a structure?
我将其发送到服务器:
import requests
response = requests.get('http://SERVER-IP/get.cgi?req=zones')
print(response.content)
我得到一串这样的数据:
b'CS\x01\x00\x00\x00\x01\x00MainAuditorium\x00\x00\x00\x00\x01\x00\x03\x00\x00\x00\x01\x00\x00\x00'
在网站上,它列出了可变长度结构
typedef struct ZonesData {
uint16_t signature; // Signature = 'CS'
int16_t version; // Version = 0x0001 (or negative error code)
uint8_t reserved[2]; // -
uint16_t zoneCount; // Number of zones
ZoneRecord zones[]; // Variable array of zone records
} ZonesData;
#define STACK_NAME_BUF_SIZE 16
typedef struct ZoneRecord {
char name[STACK_NAME_BUF_SIZE]; // Name of zone
uint8_t playbackIndex; // Playback index
uint8_t joinGroup; // Join group
uint16_t count; // Number of PresetID/Status pairs
uint32_t data[]; // Array of PresetID/Status pairs (32 pairs max)
} ZoneRecord;
如何让 python 以人类可读的形式输入代码?
可以使用返回的整数来更新 UI 上的按钮吗? 我假设我可以,我只是不确定我是否会参考 integer 或 integer 的人类可读性。
附加项目上下文:我正在尝试将 Qsys 和 Cueserver 集成在一起,以便在从 Cueserver 墙控台触发新预设时更新 Qsys 触摸板按钮。
我的姐夫和我在这个周末做了一些工作,他想出了这个……我仍在研究他所做的事情,以便我可以修改它以获得更多回应。 您可以要求服务器返回一堆不同的字符串(全部采用相同的原始格式)。 看起来我必须为每个人编写一个单独的响应......
import requests
import struct
from collections import namedtuple
PresetStatusPair = namedtuple('PresetStatusPair', 'preset status')
class ZoneData:
def __init__(self, data, offset):
self.size = 20
self.name, self.playback_index, self.join_group, count = struct.unpack_from("16sBBH", data, offset)
self.name = str(self.name, 'ascii')
self.data = []
for i in range(count):
unpacked = struct.unpack_from("II", data, offset + self.size)
self.data.append(PresetStatusPair._make(unpacked))
self.size += 8
class ZonesData:
def __init__(self, data):
if len(data) == 4:
raise Exception("CS internal error")
self.signature, self.version, zone_count_unused = struct.unpack_from("2sHxxH", data)
self.signature = str(self.signature, 'ascii')
self.parse_zone_records(data)
def parse_zone_records(self, data):
self.zone_records = []
offset = 8
while offset < len(data):
zone_data = ZoneData(data, offset)
offset += zone_data.size
self.zone_records.append(zone_data)
zones_data = ZonesData(data)
print(f"signature: {zones_data.signature}")
print(f"version : {zones_data.version}")
print(f"records :")
for record in zones_data.zone_records:
print(f" name : {record.name}")
print(f" playback_index: {record.playback_index}")
print(f" join_group : {record.join_group}")
print(f" data : {record.data}")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.