TAU G2中比一般的UML工具多了一些预定义的类,如BitString和OctetString。这些类是和ASN.1所对应的,主要为了方便处理PDU编码,这是针对通信协议软件开发设计的。一般我们喜欢使用BitString类,因为它更方便和直观。不过最近遇到一个小问题,就是如果使用BitString类,在处理比较长的PDU串时,有时无法传递到环境函数中。为了解决这个问题,一个解决办法就是采用OctetString类。

BitString类在内存中用一个字节存储一个比特位,而OctetString类使用一个字节存储8个比特位,从这点可以看出OctetString更节省内存,所以在和环境函数的通信中更为有利,所以在环境函数的信号参数定义中推荐使用OctetString

在TAU G2中,要实现BitString和OctetString之间的转换也是非常容易的。

BitString b, p;
OctetString s;

= '010'b;
= OctetString(b); // 将BitString转换为OctetString
= s.BitString(s); // 将OctetString转换为BitString

在将BitString转换为OctetString时,如果BitString的长度不是8的倍数,TAU G2会在BitString后面补零。对于上面的例子,s将为'01000000'b。

在TAU G2生成的C代码中,BitString和OctetString实际上是一个东西,所以使用OctetString代替BitString之后,环境函数中的绝大多数代码不需要修改,只是要注意OctetString的Bits数组中的每个元素不再是0和1,而是0到255之间的一个数了。
posted on 2009-10-03 21:43  zealsoft  阅读(2822)  评论(0编辑  收藏  举报