zoukankan      html  css  js  c++  java
  • #pragma pack注意点

      在做串口通信,统计解包出错数的项目中,我利用#pragma pack(1)来对齐结构体:  

    #define INFO_LEN 10
    #pragma pack(1)
    struct _packet
    {
            unsigned char packet_head;                      //包头
            unsigned int info_length;                       //消息长度
            unsigned char info_content[INFO_LEN];           //消息主体
            unsigned char packet_sum;                       //校验和
    }Packet; 

      但在程序测试中我发现一个现象:在发送程序中的变量与接收程序中的变量不一样,当然它们是同一个变量,后面经过调试发现问题所在:在发送程序中因为受#pragma pack(1)影响,当然我的本意利用#pragma pack(1)只针对Packet。

      如果只是想针对Packet,而不想影响程序中的其它部分,需要如下定义: 

    #define INFO_LEN 10
    #pragma pack(1)
    struct _packet
    {
            unsigned char packet_head;                      //包头
            unsigned int info_length;                       //消息长度
            unsigned char info_content[INFO_LEN];           //消息主体
            unsigned char packet_sum;                       //校验和
    }Packet; 
    #pragma pack() //恢复缺省对齐

      

      

  • 相关阅读:
    暑假第二十七测
    暑假第二十七测
    【真题解】牛宫
    【伪题解】牛宫
    最优贸易
    跳马问题
    求和问题
    【题解】山区建小学
    OpenStack之虚机冷迁移代码简析
    OpenStack之虚机热迁移代码解析
  • 原文地址:https://www.cnblogs.com/danshui/p/2657730.html
Copyright © 2011-2022 走看看