【问题标题】:sending any structure via QTcpSocket通过 QTcpSocket 发送任何结构
【发布时间】:2011-08-19 04:09:40
【问题描述】:

如何在写入套接字之前将结构转换为 char* 形式?

【问题讨论】:

    标签: qt


    【解决方案1】:

    使用QDataStream。它具有处理字节序(字节顺序)和 Qt 类序列化的优势。简单地将结构转换为 char* 会导致很多问题,包括字节顺序、编译器填充等。我建议改用流。

    【讨论】:

    • QDataStream 剂量支持结构如:out
    • 阅读stackoverflow.com/questions/2473300/…,看看如果你想这样做,如何使你的结构可序列化
    • 如果我得到解决方案,我肯定会喜欢这条路,因为使用 QDataStream 比 Char* 容易得多
    【解决方案2】:

    仅仅是: char *ptr = (char*)&myStructObject; ? 或者你是什么意思?

    【讨论】:

    • 是的,我的意思只是这个,如果 myStructObjet 的一个成员包含指向另一个结构的指针,那么它自己也可以进入这个,car* 缓冲区
    • 接收者将无法引用指针,指针仅在您的程序上下文中有意义。如果您的结构包含指针,则需要将其转换为新结构,该结构保存值而不是指针
    • @anjali:如果您想通过套接字传递您的结构,那么最好添加一个 >> 运算符,它将 QDataStream & 作为参数。此方法会将您的结构推送到附加到您的套接字的流中。您还可以为您的结构创建一个构造函数,它将 QDataStream & 作为参数并从中构建您的结构。当您必须解码来自套接字的数据时,它会很有用。
    • @angili:不,因为如果你的结构中有指针,它们在接收方将变得无效。因此,您必须手动创建包含所有必要信息的缓冲区,以恢复接收方的结构
    【解决方案3】:

    您可能需要查看此线程:How to convert struct to char array in C

    【讨论】:

    • 谢谢你,这将是充分的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多