Keil中取消结构体对齐的方法

我在写通讯协议的时候喜欢使用 Union 的形式将整个数据包按需处理,接收数据时使用数组形式来接收,解析数据则使用结构体形式来解析,伪代码如下。

union {uint8_t tab[16];struct {uint8_t a;uint32_t e32; /* 为了突出结构体对齐问题,将其放到这里 */uint8_t b;uint8_t c;uint8_t d;}t;
}test;for(uint32_t i = 0; i < 16; i++)
{tab[i] = (i << 4) | i;
}

但是,在给test.tab赋值之后,会因为结构体对齐原因读取到 “错误” 的test.t.e32,为了解决这个问题,我们要使用过__packed关键字取消结构体对齐,这里面还有坑。

/* 第一次用的时候我是这样用的 */
/* 找了半天不知道错误在哪 */
union {uint8_t tab[16];__packed struct {uint8_t a;uint32_t e32;uint8_t b;uint8_t c;uint8_t d;}t;
}test;

应该把__packedstruct后面(GNU Compiler)。

这样就可以解析到正确结果。

Keil中取消结构体对齐的方法相关推荐

  1. C/C++ 中访问结构体成员的方法

    先看例子:  1#include <stdio.h> 2void main(){ 3    typedef struct {     4     int int_field;      5 ...

  2. linux windows 结构体,Linux下C语言——结构体对齐

    结构体对齐的步骤: 1.结构体各成员对齐 2.整个结构体圆整 结构体对齐的特定对齐值: 1.自身对齐值: 自身对齐值就是结构体变量里每个成员的自身大小; 2.指定对齐值: 指定对齐值是由宏#pragm ...

  3. c/c++下取消结构体字节对齐方法

    c/c++下取消结构体字节对齐方法 在c/c++下编译器会默认地对结构体进行对齐,其对齐的方法跟平台具体的特性有关,本文主要介绍结构体不进行对齐的方法. 1.结构体字节不进行对齐的用途 (1).减小内 ...

  4. C语言之结构体以及结构体对齐访问

    1:简单理解,结构体就是数组的进一步发展,数据的优点和缺陷在于数据里面是元素类型必须相同,但是结构体没有这个要求,结构体里面元素的类型可以相同也可以不同. 2:结构体的定义: struct stude ...

  5. 结构体复数相乘c语言,复数乘法中的结构体赋值实现代码

    复数乘法中的结构体赋值实现代码 废话不多说,直接上代码 复制代码 代码如下: #include using namespace std; typedef struct { double real; d ...

  6. C语言中的结构体,结构体中数组初始化与赋值

    最近写c语言中的结构体遇到了些问题,从网上找了些资料如下: 结构体是连续存储的,但由于结构体中成员类型各异,所以会存在内存对齐问题,也就是内存里面会有空档,具体的对齐方式这里 暂不讨论: 1.结构体的 ...

  7. C语言中的结构体(struct)详解

    C语言中,结构体类型属于一种构造类型(其他的构造类型还有:数组类型,联合类型).本文主要介绍关于结构体以下几部分. 1.概念 为什么要有结构体? 因为在实际问题中,一组数据往往有很多种不同的数据类型. ...

  8. C语言中的结构体(struct)

    C语言中,结构体类型属于一种构造类型(其他的构造类型还有:数组类型,联合类型).本文主要介绍关于结构体以下几部分. 1.概念 为什么要有结构体? 因为在实际问题中,一组数据往往有很多种不同的数据类型. ...

  9. 关于C语言中的结构体所占的字节数 sizeof(struct)

    C语言中的结构体所占的字节数 ,用sizeof求一个结构体的大小 C语言中用sizeof求结构体所占字节数的详细方法. 一.非嵌套结构体 struct one{char a; // 1(char所占字 ...

最新文章

  1. Servlet防止页面被客户端缓存
  2. 国内高校硕博补贴大公开!(某校博士在读已经年薪 25w 了)
  3. awk 抓取文件子集
  4. VTK:可视化之QuadraticSurface
  5. Visual C#使用ADO.NET自定义类MyDBase连接SQL Server数据库
  6. IDC机房对接阿里云
  7. win10禁用计算机维护,win10哪些服务可以禁用 服务哪些可以禁止启动
  8. 使用SqlBulkCopy 批量操作大量数据
  9. Linux 有问必答: 如何在Linux中加入cron任务
  10. 父与子的编程之旅 python 3_Python!帮我做一下选择呗:父与子的编程之旅 学习笔记(5) 2018-07-10...
  11. 多态_python的小窝_百度空间
  12. python google地图_Google地图下载
  13. asp毕业设计—— 基于asp+access的网上聊天室设计与实现(毕业论文+程序源码)——网上聊天室
  14. 听老外吐槽框架设计,Why I Hate Frameworks?
  15. ECharts官方教程(四)【个性化图表的样式】
  16. 屏蔽google adsense和百度推广的广告
  17. 基因家族TBTools
  18. 智能时代的内容安全,易盾是如何落地的?
  19. iTop-4412 裸机程序(十七)- 按键介绍
  20. 计算机文秘所学的专业知识,18文秘02李荧 随着现代科学技术的发展,计算机已经...

热门文章

  1. AutoCAD导出wmf文件,并转成wpf xaml
  2. 二年级上册计算题_分享14套二年级数学乘法计算题
  3. 光散射理论的简要概述
  4. Vscode下载与配置(C语言)
  5. 解决Spyder无法抓取Yahoo!finance财经数据
  6. Kaggle比赛模型融合方法
  7. 计算机趣味数学社团活动管理制度,趣味数学社团活动方案
  8. Reflective反射机制解析
  9. 1. Java之父是谁?java哪年推出的?
  10. DES加解密工具(DES/ECB、DES/CBC)