我正在将其发送到服务器:
import requests
response = requests.get('http://SERVER-IP/get.cgi?req=zones')
print(response.content)
我得到一个字符串数据如下:
b'CSx01x00x00x00x01x00MainAuditoriumx00x00x00x00x01x00x03x00x00x00x01x00x00x00'
在网站上,它列出了一个可变长度结构
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上的按钮吗?我假设我可以,我只是不确定我会引用整数还是人类可读的整数。
附加项目上下文:我正在尝试集成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}")