4.1.4.5 Arrays

4.1.4.5.1 Arrays (固定长度)

固定长度阵列更易于在非常小的设备中使用。使用动态长度阵列的ECU可能需要更多的资源。//动态数组耗资源尽量不用

具有固定长度的数组可以以可选长度字段(即length field)开头。 //固长数组序列化时前面加不加lengthfield都可以,建议不加

如果固定长度数组的长度大于预期值(预期值应基于数据类型定义),则只能解释数据类型中指定的元素,并根据长度字段跳过其他字节

如果固定长度数组的长度小于预期值(预期值应基于数据类型定义),并且接收器无法在本地提供缺失数据的替换,则应中止反序列化,并将消息视为格式错误。

注意:固定大小数组的溢出只能用长度字段检测

一维数组

具有固定长度“n”的一维阵列应正好携带“n”个相同类型的元素。可选长度字段可以位于第一个元素之前(如下图)

多维数组

多维数组的序列化遵循编程语言中多维数组的内存布局(rowmajor顺序)。

如果为特定的多维固定长度数组定义了长度字段,则该数组在总线上表示为长度字段和n个集合的组合,每个集合由长度字段和相同数据类型的m个元素组成。

4.1.4.5.2 动态长度 Arrays

具有动态长度的阵列的布局应基于固定长度阵列的布局。

数组开头的可选长度字段应用于指定数组的长度(以字节为单位)。

长度字段的长度应为0、8、16或32位。这应由配置决定。

长度不包括长度字段的大小。

注意:如果长度字段的长度设置为0位,则数组中的元素数量必须固定;因此是具有固定长度的阵列。

在一维数组中,使用一个长度字段,该字段携带用于数组的字节数

静态长度元素的数量可以很容易地通过除以元素的大小来计算。

在动态长度元素的情况下,无法计算元素的数量,但必须按顺序解析元素。

在多维数组中,不同维度的每个子数组都应有自己的长度字段。

如果需要静态缓冲区大小分配,数据类型定义应定义每个维度的最大长度。

理由:当以字节为单位测量长度时,可以在反序列化中跳过复杂的多维数组。

SOME/IP还支持相同维度中列的不同长度和行的不同长度。见图4.14中的k_1和k_2。长度指示器需要出现在每个动态长度数组的前面。这适用于外部和所有内部/嵌套数组。

如果可变长度数组的长度大于预期值(预期值应基于数据类型定义),则只能解释数据类型中指定的元素,并根据长度字段跳过其他字节

如果未配置,则添加在动态长度数组前面的长度字段的长度为32位(长度字段的默认长度)。

----------------------------------------------

以上总结一下固定长度数组可以不加lengthfield,动态数组必须加(默认是4字节哦)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

whs_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值