CANoe中的英特尔(Inter)格式与摩托罗拉(Motorola)格式
一、 背景说明
制作过DBC文件的人都知道信号(Signal)的字节排序(Byte Order)属性 中有英特尔格式(Inter)格式与摩托罗拉(Motorola)格式可以选择,如下:

这两种格式对应的就是我们常说的大端模式(Big-endian)和小端模式(Little-endian).
1.1. 介绍大端模式与小端模式
举一个例子,比如我们要保存一个数字: 0x12 34 56 78 , 通过它在内存中的分布位置来说明大小端存储的差异。
大端模式(Big-Endian):就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端
低内存地址 -------------> 高内存地址
0x12 | 0x34 | 0x56 | 0x78
小端模式(Little-Endian):就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
低内存地址 -------------> 高内存地址
0x78 | 0x56 | 0x34 | 0x12
可以很明显看到, 大端模式与我们直观非常相近,因为我们书写习惯是将高位写在前面,低位写在后面。
我们常用的X86结构是小端模式;并且很多的ARM架构也都为小端模式。
举个例子
16bit宽的数字0x1234在Little-endian/Big-endian模式下, 内存中的存放方式(假设从地址0x4000开始存放)为:
| 内存地址 | 小端模式存放内容 | 大端模式存放内容 |
|---|---|---|
| 0x4000 | 0x34 | 0x12 |
| 0x4001 | 0x12 | 0x34 |
32bit宽的数字0x12345678 在Little-endian/Big-endian模式下,内存中的存放方式(假设从地址0x4000开始存放)为:
| 内存地址 | 小端模式存放内容 | 大端模式存放内容 |
|---|---|---|
| 0x4000 | 0x78 | 0x12 |
| 0x4001 | 0x56 | 0x34 |
| 0x4002 | 0x34 | 0x56 |
| 0x4003 | 0x12 | **0x78 ** |
大端模式与小端模式的优缺点
- 大端模式的优点:符号位的判定固定为第一个字节,
容易判断正负。 - 小端模式的优点:强制转换数据
不需要调整字节内容
1.2. 大端模式与小端模式的判断与转换
判断电脑使用了大端模式还是小端模式
使用C语言来实现:
int i=1;
char *p=

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



