none
vb.net怎样实现位移。 RRS feed

  • 问题

  • asn.1中的ber编码,要求用到位移,但我不知道怎么实现。

    比如一个数 113549 二进制表示就是 11011101110001101

    ber编码中要求基于128编码,除最后一个字节外,每个octet撮高位都为1

    113549的表示就是

             110       1110111           0001101
    10000110      11110111         00001101

    0x86            0xf7               0x0d


    113549 的BER编码为 0x86 0xf7 0x0d

    怎样来实现这种操作啊。

    我本来想转换成string的2进制字符串,然后对字符串进行操作,但觉得效率太低了。

    2010年2月8日 14:55

答案

  • 搞定了,直接用mod运算就可以了,不用搞那么复杂了,呵呵

      Dim val As Integer

            Dim byesContents As Byte()

     

            val = 113549
            byesContents = New Byte(2) {}

            Dim i As Integer = 0

            Do
              
                If val < 128 Then
                    byesContents(i) = val
                    Console.WriteLine(Hex(byesContents(i)))
                    Exit Do
                Else
                    byesContents(i) = val Mod 128
                    val = val \ 128   '此处一定要用反斜进行取整运算,否则会出现错误
                    Console.WriteLine(Hex(byesContents(i)))
                    i += 1
                End If

            Loop

    2010年2月8日 16:16