以一个初始地址为0x 7f 20,长度0x205的ddb section为例:
0x 7f 20 | Section header,长度为8,其中section length字段结束后还有5个 |
0x 7f 28 | c个 message header,message length字段在其末尾,以为adaptation length = 0 |
0x 7f 34 | 6个ddb header |
0x 7f 3a | Ddb data,长度0x1e7 |
0x8121 | 4个crc字段 |
0x8125 |
|
这个section的section length = 0x202,message length = 0x1ed。
由上面的地址可知:
0x 7f 20 + 0x3 + 0x202= 0x8125,也就是section的结束位置。
由dsm-cc的文档可知,section length表示的是section开始位置处section length字段结束后到section末尾的长度,这与上面的实际情况一致,以为section length结束位置距section头3个字节。
下面来看message length:
0x 7f 28 + 0xc + 0x1ed = 0x8121, 也就是message结束的位置。
由dsm-cc文档可知,message length表示该字段结束后到message末尾的长度,因为adaptation length = 0,也就是message length后没有adaptation header,所以message头加上0xc就刚好是message length结束的位置。
Dsm-cc中,特别要注意这个length是从当前字段结束时算起的,如果我们用直接read 文件头作为struct的方式来解析,需要特殊处理,计算剩余的length,如果是一个字段一个字段读取的,就没有这个问题了。