如何对从c++套接字发送到qt udp套接字的结构进行序列化和反序列化
实际上我正在尝试这个序列化和反序列化的逻辑 像这样
struct stCardInfo
{
unsigned short nsCardType;
unsigned short nsNoOfSignals;
unsigned short nsStatus;
};
struct stErrorInfo
{
unsigned short nsErrorType;
char ErrorInfo[8];
};
struct stInitHealthCheck
{
unsigned short nsNoOfCards;
stCardInfo* lsCardInfo;
};
stInitHealthCheck stHealthCheck;
unsigned short *q = (unsigned short *)data;
stHealthCheck.nsNoOfCards = *q; q++;
stHealthCheck.lsCardInfo = new stCardInfo;
stHealthCheck.lsCardInfo->nsCardType = *q; q++;
stHealthCheck.lsCardInfo->nsNoOfSignals = *q; q++;
stHealthCheck.lsCardInfo->nsStatus= *q; q++;
但是如果结构更多,那么我每次解码到特定数据类型都会变得复杂且耗时 所以我问是否有任何有效的序列化和反序列化方法,以便我可以非常快速地解码和编码发送和接收的 udp 数据包
最佳答案
通信设备上的字节顺序可能不同,您应该使用 htons
或 ntohs
发送/接收时 unsigned short
此外,如果您将结构转换为 char*
发送方的缓冲区,请注意,这不是编写通信协议(protocol)的跨平台方式。当您的代码为 compiled using a different compiler 时,该结构在二进制级别可能具有不同的表示形式.
但是当你有很多 serialization libraries that are already available 时,为什么还要搞砸所有这些低级的东西呢? .只需从列表中选择一个即可!
如果双方都使用Qt,可以使用 QDataStream
.你可以看看Qt算命client/server用于演示。
如果其中一个不使用 Qt,您可能想使用 JSON(supported in Qt,还有 many JSON C++ libraries)。如果您更喜欢二进制格式,您可能想看看 msgpack .
关于c++ - 使用UDP协议(protocol)从Windows Socket发送到Qt Socket的网络包编解码结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48337723/