Keil中取消结构体对齐的方法
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;
应该把__packed
放struct
后面(GNU Compiler)。
这样就可以解析到正确结果。
Keil中取消结构体对齐的方法相关推荐
- C/C++ 中访问结构体成员的方法
先看例子: 1#include <stdio.h> 2void main(){ 3 typedef struct { 4 int int_field; 5 ...
- linux windows 结构体,Linux下C语言——结构体对齐
结构体对齐的步骤: 1.结构体各成员对齐 2.整个结构体圆整 结构体对齐的特定对齐值: 1.自身对齐值: 自身对齐值就是结构体变量里每个成员的自身大小; 2.指定对齐值: 指定对齐值是由宏#pragm ...
- c/c++下取消结构体字节对齐方法
c/c++下取消结构体字节对齐方法 在c/c++下编译器会默认地对结构体进行对齐,其对齐的方法跟平台具体的特性有关,本文主要介绍结构体不进行对齐的方法. 1.结构体字节不进行对齐的用途 (1).减小内 ...
- C语言之结构体以及结构体对齐访问
1:简单理解,结构体就是数组的进一步发展,数据的优点和缺陷在于数据里面是元素类型必须相同,但是结构体没有这个要求,结构体里面元素的类型可以相同也可以不同. 2:结构体的定义: struct stude ...
- 结构体复数相乘c语言,复数乘法中的结构体赋值实现代码
复数乘法中的结构体赋值实现代码 废话不多说,直接上代码 复制代码 代码如下: #include using namespace std; typedef struct { double real; d ...
- C语言中的结构体,结构体中数组初始化与赋值
最近写c语言中的结构体遇到了些问题,从网上找了些资料如下: 结构体是连续存储的,但由于结构体中成员类型各异,所以会存在内存对齐问题,也就是内存里面会有空档,具体的对齐方式这里 暂不讨论: 1.结构体的 ...
- C语言中的结构体(struct)详解
C语言中,结构体类型属于一种构造类型(其他的构造类型还有:数组类型,联合类型).本文主要介绍关于结构体以下几部分. 1.概念 为什么要有结构体? 因为在实际问题中,一组数据往往有很多种不同的数据类型. ...
- C语言中的结构体(struct)
C语言中,结构体类型属于一种构造类型(其他的构造类型还有:数组类型,联合类型).本文主要介绍关于结构体以下几部分. 1.概念 为什么要有结构体? 因为在实际问题中,一组数据往往有很多种不同的数据类型. ...
- 关于C语言中的结构体所占的字节数 sizeof(struct)
C语言中的结构体所占的字节数 ,用sizeof求一个结构体的大小 C语言中用sizeof求结构体所占字节数的详细方法. 一.非嵌套结构体 struct one{char a; // 1(char所占字 ...
最新文章
- Servlet防止页面被客户端缓存
- 国内高校硕博补贴大公开!(某校博士在读已经年薪 25w 了)
- awk 抓取文件子集
- VTK:可视化之QuadraticSurface
- Visual C#使用ADO.NET自定义类MyDBase连接SQL Server数据库
- IDC机房对接阿里云
- win10禁用计算机维护,win10哪些服务可以禁用 服务哪些可以禁止启动
- 使用SqlBulkCopy 批量操作大量数据
- Linux 有问必答: 如何在Linux中加入cron任务
- 父与子的编程之旅 python 3_Python!帮我做一下选择呗:父与子的编程之旅 学习笔记(5) 2018-07-10...
- 多态_python的小窝_百度空间
- python google地图_Google地图下载
- asp毕业设计—— 基于asp+access的网上聊天室设计与实现(毕业论文+程序源码)——网上聊天室
- 听老外吐槽框架设计,Why I Hate Frameworks?
- ECharts官方教程(四)【个性化图表的样式】
- 屏蔽google adsense和百度推广的广告
- 基因家族TBTools
- 智能时代的内容安全,易盾是如何落地的?
- iTop-4412 裸机程序(十七)- 按键介绍
- 计算机文秘所学的专业知识,18文秘02李荧 随着现代科学技术的发展,计算机已经...