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() //恢复缺省对齐

      

      

  • 相关阅读:
    实验三
    第四次实验
    作业
    第二次实验
    <转>JVM调优
    SQL Server的聚集索引和非聚集索引
    去除DataTable里面重复的数据
    sql server 与 Excel 导入导出
    C#学习笔记 委托和事件
    好多特效
  • 原文地址:https://www.cnblogs.com/danshui/p/2657730.html
Copyright © 2011-2022 走看看