对如何解释NTCIP 1203v3中的各种“位图”OCTET STRING对象有共识吗?如果存在歧义而没有一致意见,那么我的断言是必须在下一个版本中弃用辩论的对象,并且中央系统应该避免在此期间使用它们。
背景:
NTCIP 1203定义了几个OCTET STRING对象,并使用以下术语:
从技术上讲,这些术语没有为OCTET STRING定义。 ASN.1声明“在指定八位字符串的编码规则时,八位字节由术语第一个八位字节和尾随八位字节引用,八位字节内的位由术语最高有效位和最低有效位引用。”可以合理地假设“低阶位”与“最低有效位”相同,但该术语仅在八位字节内具有精确定义,而不是在整个字符串上。
问题1.简单的低/高位
我相信普遍认为单个OCTET STRING对象的“低(高)位”意味着“尾随(前导)八位字节的最低(最高)位”。这是用于StatusMap的术语对象和characterBitmap对象并产生以下结果: characterBitmap:F =左上角像素; 0 =后续像素; L =右下像素; P =填充:
First Octet|Second Octet
msb..lsb msb..lsb
F0000000 000LPPPP
StatusMap:F = Index 1,0 =后续索引项; L =最后一个索引项; P =填充:
PPPPL000 0000000F
是的,令人讨厌的是,这些都是相反的,但标准中的措辞明显是相反的,因此任何解释都必须反映出来。我认为以上是一种普遍的解释。有人不同意吗?
问题2. dmsSupportedMultiTags
dmsSupportedMultiTags是一个OCTET STRING(SIZE(4))。定义声明“此对象是标记支持的位图表示。”然后定义一系列位值,例如“位11:新页面[np]”
虽然ASN.1没有在这个精确的上下文中定义位数,但是当使用“bstring”表示法时,列出的第一位是第一个字节的高位,并且填充被添加到低位的位最后一个字节。这可能意味着一个序列,您从第一个八位位组的高位开始向低位开始向第二个八位位组开始计数,依此类推。
另一种解释可能是“位图表示”意味着它应该被解释为ASN.1 BIT STRING。 ASN.1声明“位串的前导位由'数字'零标识,后续位具有连续值。”在BER中,前导位位于第一个八位位组的最高位。这与前一段和characterBitmap的逻辑一致。
然而,我听到一些人认为“人们普遍认为Bit 0是整数的低位。”我承认这个“二进制”逻辑是广泛的术语,但是这个对象并没有被定义为INTEGER。从OCTET STRING到INTEGER的跳转远不如OCTET STRING到BIT STRING,特别是当对象可以被定义为INTEGER时。
因此,我认为正确的解释是将值编码为BIT STRING,其中位0 = F,位29 = L且填充= P:
F0000000 00000000 00000000 00000LPP
对此解释是否存在普遍共识,还是我们需要弃用此对象?
问题3. dmsPixelStatus
在这种情况下,我们不仅有关于位和字节顺序的模糊措辞,而且我们还必须处理表中行的逻辑顺序。定义指出:
我可以看到多种解释,包括但不限于(我将表的每一行限制为3个字节而不是400个空间):
00000000 00000000 0000000F
L0000000 0000PPPP
或
00000000 00000000 0000000F
PPPPL000 00000000
或
0000000F 00000000 00000000
00000000 PPPPL000
等
我的印象是对此没有达成共识,但我想我会问这个问题,看看社区的想法。