以下要求适用于固定长度和动态长度字符串。
应该支持这几种编码格式:UTF-8,UTF-16BE and UTF-16LE.
UTF-16LE和UTF-16BE字符串应以“\0”字符零结尾。这意味着它们应以(至少)两个0x00字节结尾
UTF-16LE和UTF-16BE字符串的长度应均匀。
最后一个字节长度为奇数的UTF-16LE和UTF-16BE字符串应被忽略。之前的两个字节应为0x00字节(终止)。
所有字符串应始终以字节顺序标记(BOM)开头。BOM应包含在固定长度字符串和动态长度字符串中。BOM允许检测使用的编码。
4.1.4.4.1 string(固定长度)
字符串应以“\0”字符结尾,尽管长度固定。
必须在数据类型定义中指定 以字节为单位 的字符串长度(包括“\0”)。使用“\0”填充未使用的空间。BOM包含在长度中。
如果固定长度字符串的长度大于预期值(预期值应基于数据类型定义),则应中止反序列化,并将消息视为格式错误。
如果固定长度字符串的长度小于预期值(预期值应基于数据类型定义),并且使用“\0”正确终止,则应接受该字符串。
如果固定长度字符串的长度小于预期长度(预期值应基于数据类型定义),并且未使用“\0”正确终止,则应中止反序列化,并将消息视为格式错误。
4.1.4.4.1 string(动态长度)
具有动态长度的字符串应以length field(长度场)开头。长度以字节为单位。
长度字段放置在BOM表之前,BOM表包含在长度中。
字符串以“\0”结尾。
字符串的最大字节数(包括以“\0”结尾的字节数)也应从数据类型定义中得出。
动态长度字符串的长度字段应为8、16或32位。这应由配置决定。
如果未配置,则添加在字符串前面的length field长度为32位(长度字段的默认长度)。【默认四字节】
length field的值中不考虑字符串length field长度;即lengthfield不对自身进行计数。
如果具有可变长度的字符串的长度大于预期值(预期值应基于数据类型定义),则应中止反序列化,并将消息视为格式错误。
除了将应用程序字符串作为带有BOM和“\0”端接的SOME/IP字符串进行传输之外,还可以将字符串作为没有BOM和“\0”端接(参见第4.1.4.5.2章)的纯动态长度数组进行传输。请注意,这需要在应用程序中进行完整的字符串处理(例如,端接转换)。
这也可以通过将属性implementsLegacyStringSerialization设置为true来实现。在CP中,此属性在SOMEIPTransformationISignalProps中配置,而在AP中,则在ApSomeipTransformationProps中进行配置。
注意!此属性不是未来安全的,将在即将发布的AUTOSAR版本中删除!
因此,为了向前兼容,在这种情况下最好使用纯动态长度数组。