如何解决如何交换由较小的独立值组成的二进制值的字节序
我正在创建一个读取DBC文件并解码can消息的类。
在BC文件中,有一个选择指示消息帧中的值是大Endian还是小Endian。
我不确定我应该如何转换为大端序整数。我应该逐位或逐位反转整个消息数据,还是应该提取所需的位然后转换为大字节序。如果我需要反转一个奇数位数的值,这可能是个问题。
例如,如果是字节,则不能通过交换转换3位的齿轮位置值。
以下是我在处理此文档时参考的文档的链接:
- http://socialledge.com/sjsu/index.php/DBC_Format
- http://read.pudn.com/downloads766/ebook/3041455/DBC_File_Format_Documentation.pdf
解决方法
仅当您知道内容的数据类型时,Endianess才有意义。例如,一个8字节的CAN帧可以包含4 x 16位整数,或者2 x 32或1 x64。在所有这些情况下,如何转换为适当的字节序是不同的,如果您根本需要转换的话–当然取决于目标系统的持久性。然后,当然CAN帧可以小于8个字节。
因此没有必要为此创建一些通用算法,每个帧都必须根据其内部指定数据的性质进行编码/解码。除非您知道应用程序层协议,否则您将无法执行此操作。
(CAN标识符和CRC始终为大端字节,但这并不影响有效负载,并且CAN控制器将处理帧的这些部分的网络字节序,而不是程序员。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。