如何交换由较小的独立值组成的二进制值的字节序

问题描述

我正在创建一个读取DBC文件并解码can消息的类。

在BC文件中,有一个选择指示消息帧中的值是大Endian还是小Endian。

我不确定我应该如何转换为大端序整数。我应该逐位或逐位反转整个消息数据,还是应该提取所需的位然后转换为大字节序。如果我需要反转一个奇数位数的值,这可能是个问题。

例如,如果是字节,则不能通过交换转换3位的齿轮位置值。

以下是我在处理此文档时参考的文档的链接:

解决方法

仅当您知道内容的数据类型时,Endianess才有意义。例如,一个8字节的CAN帧可以包含4 x 16位整数,或者2 x 32或1 x64。在所有这些情况下,如何转换为适当的字节序是不同的,如果您根本需要转换的话–当然取决于目标系统的持久性。然后,当然CAN帧可以小于8个字节。

因此没有必要为此创建一些通用算法,每个帧都必须根据其内部指定数据的性质进行编码/解码。除非您知道应用程序层协议,否则您将无法执行此操作。

(CAN标识符和CRC始终为大端字节,但这并不影响有效负载,并且CAN控制器将处理帧的这些部分的网络字节序,而不是程序员。)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...