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