什么是大小端,网上文章汗牛充栋,不再赘述。
具体到CAN传输,总觉得大端模式有点反人类,不易于理解。秉着只有深刻理解才能记住的原则,将大小端进行图形化。
小端模式,就是数据的低位部分填充到低字节,高位部分填充到高字节。数据填充方向是按下图的箭头,先填充数据的低位。
大端模式,就是数据的高位部分填充到低字节,低位部分填充到高字节。数据填充方向是按下图的箭头,先填充数据的高位。
举个栗子,要填充两个12bit的数据至bit0~bit23,其值分别为0x123, 0x456, 具体的填充结果如下:
byte | 小端 | 大端 |
---|---|---|
0 | 0x23 | 0x12 |
1 | 0x61 | 0x34 |
2 | 0x45 | 0x56 |
对于小端模式,如果我们从高地址往低地址读数据,读出来数据顺序是符合直觉的:
byte2 | byte1 | byte0 |
---|---|---|
0x45 | 0x61 | 0x23 |
对于大端模式,如果我们从低地址往高地址读数据,读出来数据顺序是符合直觉的:
byte0 | byte1 | byte2 |
---|---|---|
0x12 | 0x34 | 0x56 |