问题如下:
      在我接收到(8字节)字符串后,取4,5 个字节,第4字节高三位有效,第5个字节高8位有效,也就是11位的MC,要把它取反加1,生成EMA ,也就是这样11位的取反加1,后的数据,请问大家,我怎么能才能实现该功能?劳驾大家帮我想想办法.

解决方案 »

  1.   

    一个字节最多8位,“第5个字节高8位有效”指整个字节有效吧。
    Dim aReceived(1 to 8) '假定这是你接收的 8 个字节
    dim l as long 
    l = (aReceived(5) * 8 ) + (aReceived(4) \ 32)
    l = ((not l) and &H7FF) + 1
    'l 即为 EMA,如果不需要进位多出来的第12位,再执行:
    l = l and &H7FF
      

  2.   

    其实,很类似c语言的按位取反运算~.例如: ~(4个字,5个字节)+1 的结果,这里的5字节是满8位,4字节高三位有效 ,共11位,不知道vb里面有这样的函数或运算符吗,怎么实现它?
      

  3.   

    用 “Not”运算符就可实现C语言中的 ~ 运算。比如:Not(1) = -2
      1: 0000 0000 0000 0001
    Not 1: 1111 1111 1111 1110
    要完成对其中一部份位进行取反,就用“Xor”运算符。比如,对&H4545的中间8个二进制位取反:
    &H4545 Xor &H0FF0 = &H4AB5
    &H4545: 0100 0101 0100 0101
      Xor: 0000 1111 1111 0000
      = :0100 1010 1011 0101