一、字节序
计算机硬件存储数据有两种方式:大端字节序(big endian)和小端字节序(little endian)。
小端
字节序
:即低地址存低位字节,或者说在起始地址存放低位字节(Intel的机器都是采用的这种存储方法,因此有时候直接称为Intel字节序);
大端字节序
:即低地址存高位字节,或者说在起始地址存放高位字节(人类读写数值的方法,网络字节序也是这种字节序);
注:只有多字节数据的存取才牵涉到字节序,单字节数据存取不牵扯字节序问题。
二、网络字节序
在网络协议中,TCP/IP协议使用大端字节序,即高位先存的方式;
htons
(host to net short):将主机字节序(unsigned short, 16位)转换为TCP/IP网络字节序;
htonl
(host to net long):将主机字节序(unsigned long,32位)转换为TCP/IP网络字节序;
什么是
网络
字节
顺序
和主机
字节
顺序
呢?在进行
网络
编程时,需要进行转换以统一“格式” 简述:
网络
字节
顺序
NBO(Network Byte Order):按从高到低的
顺序
存储,在
网络
上使用统一的
网络
字节
顺序
,可以避免兼容性问题。主机
字节
顺序
(HBO,Host Byte Order):不同的机器HBO不相同,与CPU设计有关 详解:不同的CPU有不同的
字节序
类型 这些字
举一个例子,比如我们要保存一个数字:, 通过它在内存中的分布位置来说明大
小端
存储的差异。
大端
模式(Big-Endian):就是高位
字节
排放在内存的低地址端,低位
字节
排放在内存的高地址端低内存地址 -------------> 高内存地址
小端
模式(Little-Endian):就是低位
字节
排放在内存的低地址端,高位
字节
排放在内存的高地址端。低内存地址 -------------> 高内存地址可以很明显看到,
大端
模式与我们直观非常相近,因为我们书写习惯是将高位写在前面,低位写在后面。
参考博客:
Intel
格式与Motorola格式的区别。
主要是对上面提到的博客做下笔记,结合其他文章,转化为自己的理解写下来。直接阅读链接博客时请结合评论内容理解,博客内使用的图片有误。
1.多数厂商定义的CAN总线
字节
发送
顺序
均为先发送LSB,最后发送MSB。即:首先发送byte0(LSB),然后byte1,byte2,……(MSB)的发送
顺序
。
(链接博客有人指出:主机厂发送CAN报文数据从byte0~byte7,并不是针对信号的,而是针对CAN2.0规范,CAN2.0报文格式和时序就是从byte0到b
https://blog.csdn.net/qq_41256212/article/details/95477467
在定义CAN通信矩阵或制作dbc时,我们需要知道报文的
字节
排列
顺序
。
字节
的排列
顺序
有2种,一种是
Intel
的排列
顺序
,另一种是Motorola的排列
顺序
,就跟大
小端
字节
排序是一样的。下面笔者将简单介绍这2种
字节
排序的区别。
Intel
格式:
Intel
格式跟
小端
格式一样,低地址代表低
字节
,高地址代表高
字节
顺序
的详细解释草木瓜 2006.7.26一、基本概念位的概念:在计算机中,一个0或1称为一位(bit)。
字节
:连续的八位称为一个
字节
(Byte),
字节
是计算机中可单独处理的最小单位。即以
字节
为基本单位来解释信息,规定1个
字节
是8个二进制位。通常1个ASCII码用1个
字节
存放,1个汉字用2个
字节
存放,双精度浮点实数用8个
字节
存放。下面列表
C语言
中定义类型所占
字节
以及数据范围。
大端
地址:内存高位地址存放数据的低
字节
,内存低位地址存放数据的高
字节
。总结:大--高低高低
小端
地址:内存高位地址存放数据的高
字节
,内存低位地址存放数据的低
字节
。总结:小--高高低低
网络
字节序
:按照
大端
地址排列
intel
主机
字节序
:按照
小端
地址排列...
CAN数据的传输
顺序
:从上到下,从左到右。
字节序
和位序分为:
大端
和
小端
大端
:高
字节
存放在低地址,低
字节
存放在高地址(
大端
从左往右)
小端
:低
字节
存放在低地址,高
字节
存放在高地址(低放低,
大端
的逆序)CAN数据的位序为
大端
CAN数据的
字节序
可以定义Motorola:
大端
字节序
Intel
:
小端
字节序
。
结构体是一种数据的归类方式,相比数组或变量更具有整体全面性,例如一个数组只可以放一些按照元素
顺序
存放的单元变量,即 buffer = {x, x, x, x, x&hell
ip
;},i 有多大,数组内元素就有多少。那么我们这时候如果我们用这个数组来接收串口接收信息,信息的格式是: 数据头 ->数据长度 ->数据区 ->数据校验 ->数据尾