所以我现在正在尝试解压缩具有以下格式的结构,用C语言编写:
{
volatile bool
volatile float
bool
}
我使用UDP库发送了这个
Udp.write(((byte*)&pm), sizeof(struct PressureMonitor));
另一方面,我使用Python来接收Datapacket。
import socket
import time
import struct
UDP_IP = '192.168.1.222'
UDP_PORT = 8742
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(1024)
print(len(data))
print(struct.unpack('cfc',data))
time.sleep(.01)
len(data)给我一个6的长度,这是预期的。但是,我在下一行遇到了问题。鉴于结构被格式化为boolean,float,boolean,' cfc'应该是正确的格式字符串。然而,它是错误的,并告诉我它应该是一个9字节的数据,这完全令我感到困惑。我可以(正如某人的建议)用float / double数组替换struct,但我觉得如果我能弄清楚这个是什么问题对我来说会更好。
答案 0 :(得分:2)
您需要告诉struct.unpack
您的数据未被填充。
格式字符串'cfc'
不包含字节顺序/对齐字符,这相当于将'@'
指定为字节顺序/对齐字符,因此您可以获得本机字节顺序和原生字符对准。浮点数据是4个字节宽,应该在4字节边界上对齐,但是因为在第一个bool之后添加float 3填充字节之前你有一个字节bool,以确保float正确对齐。
您可以使用'=cfc'
格式字符串指定没有填充的本机字节顺序。但最好明确指出正确的字节顺序。如果数据是从Intel计算机发送的,则为'<cfc'
。有关详细信息,请参阅struct
模块文档中的Byte Order, Size, and Alignment。