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字节哦)。