首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么从套接字读取时CAN总线帧ID是向后的?

为什么从套接字读取时CAN总线帧ID是向后的?
EN

Stack Overflow用户
提问于 2017-09-25 12:00:18
回答 1查看 3.9K关注 0票数 3

所以我有一个Raspberry Pi读数可以从车辆的数据。如果我使用包含在candump中的canutils程序,我会得到一堆数据,一个示例如下:

代码语言:javascript
复制
can0 1C4 [8]  03 F3 26 08 00 00 7F 70

然后,我编写了一个简单的C++应用程序来打开can0总线的套接字,并将一些数据读入char缓冲区。如果在读取后循环遍历缓冲区的每个字符,并以十六进制格式将每个字符转换为int (并在每个字符之间放置一个管道),则得到以下信息:

代码语言:javascript
复制
c4|1|0|0|8|0|0|0|3|f3|26|8|0|0|7f|70|

我的问题是,为什么当我使用套接字和字符缓冲区读取数据时,ID字节会反转?这种行为与所有CAN ID一致。数据长度、代码和数据的格式/顺序是正确的,但ID是向后的。

谢谢,亚当

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-25 12:02:51

恭喜你,你刚刚发现了痴呆症

Endianness是指将字节排列成更大的数值、存储在计算机内存或二次存储器中或通过数字链路传输时的顺序顺序。Endianness在计算机科学中引起了人们的兴趣,因为两种相互冲突和不兼容的格式被普遍使用:单词可以用大端或小端格式表示,这取决于位、字节或其他组件是从大端(最重要位)还是从小端(最不重要位)排序而来。

作为一种惯例,网络(包括总线)数据是大端。您的PC架构可能是小endian。

为了解决这个问题,将数据传递给ntoh*()函数,以便将其字节顺序从网络(n)反转到主机(h)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46404723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档