gpt4 book ai didi

python - 使用 UDP 套接字将 C++ 结构转换为 Python

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:07:01 26 4
gpt4 key购买 nike

我正在尝试通过 UDP 套接字将 C++ 结构发送到 Python 应用程序。

这是发送结构的 C++ 代码:

// my struct
struct S_telemetryPacket {
// sensors
float temperatureSensor1;
float accelerometer1_x;
float accelerometer1_y;
float accelerometer1_z;
float batteryVoltage1;
float powerDraw1;

// motors
int motor1;
int motor2;
int motor3;
int motor4;

} S_telemetryPacket;

// ... some other code populates the struct

// then the struct is sent over UDP
int res = sendto(relaySocket, (char *)&S_telemetryPacket, sizeof(S_telemetryPacket), NULL, (SOCKADDR *)&addrGroundstation, addrGroundstationSize);

这是在 Python 中收到的原始数据:

\x00P\x03E\x00\x00\xfaD\x00\x00\x00\x00\x00@\xfbD\x00`\xfbD\x00@\x03Ed\x00\x00\x00e\x00\x00\x00n\x00\x00\x00o\x00\x00\x00

当我尝试使用结构库解压缩它时,出现错误。

print struct.unpack('eeeeeeiiii', raw_data)

这个错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: bad char in struct format

任何人都可以阐明一下吗?我收到的数据看起来很奇怪,有些符号是我不希望看到的,例如 `、@、o 等。

会不会是 C++ 端发送 struct 的方式有问题?

最佳答案

错误信息是这样的:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: bad char in struct format

这表明格式字符串是错误的。

你应该尝试:

struct.unpack('ffffffiiii', raw_data)

e format string是一个相当深奥的 16 位 float ,不太可能是你需要的。此外,Python 2 不支持它。 .

测试代码:

import struct

raw_data = b'\x00P\x03E\x00\x00\xfaD\x00\x00\x00\x00\x00@\xfbD\x00`' \
b'\xfbD\x00@\x03Ed\x00\x00\x00e\x00\x00\x00n\x00\x00\x00o' \
b'\x00\x00\x00'
print(struct.unpack('ffffffiiii', raw_data))

结果:

(2101.0, 2000.0, 0.0, 2010.0, 2011.0, 2100.0, 100, 101, 110, 111)

关于python - 使用 UDP 套接字将 C++ 结构转换为 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48254937/

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