答案:
用VB进行移位操作 作者:黄光 |
VB没有提供移位操作的指令和函数,只提供and(与)、or(或)、xor(异或)、eqv(同或)、not(非)等几个运算符,而编程时有时需要对一个字节进行移位操作(如进行加密),怎么办?其实只用and、or二个运算符即可搞掂。例如要将变量byte1的第八位置1(假设byte1的二进制值为01001101),则只需byte1 or &h80 (即01001101 or 10000000),如要将第八位置0,则只需byte1 and &h7f。请看下面程序段是如何实现循 环左移的: Public Function byteleft(byte1 As Byte, n As Integer) As Byte `将byte1左移n位 Dim intem As Byte `临时变量 Dim intem1 As Byte `临时变量 Dim x, y As Integer intem1 = byte1 For x = 1 To n `移多少位就循环多少次 For y = 8 To 1 Step -1 `从第八位(左边第一位)开始循环左移 Select Case y Case 8 If (intem1 And &H80) = &H80 Then `如果临时变量intem1的第八位是1, intem = &H1 `则将临时变量intem置1, Else intem = &H0 `反之置0 End If Case 7 If (intem1 And &H40) = &H40 Then `如果临时变量intem1的第七位是1, intem1 = intem1 Or &H80 `则将其第八位置1(其它位不变), Else intem1 = intem1 And &H7F `反之将第八位置0(其它位不变) End If Case 6 If (intem1 And &H20) = &H20 Then `操作与上面相同 intem1 = intem1 Or &H40 Else intem1 = intem1 And &HBF End If Case 5 If (intem1 And &H10) = &H10 Then intem1 = intem1 Or &H20 Else intem1 = intem1 And &HDF End If Case 4 If (intem1 And &H8) = &H8 Then intem1 = intem1 Or &H10 Else intem1 = intem1 And &HEF End If Case 3 If (intem1 And &H4) = &H4 Then intem1 = intem1 Or &H8 Else intem1 = intem1 And &HF7 End If Case 2 If (intem1 And &H2) = &H2 Then intem1 = intem1 Or &H4 Else intem1 = intem1 And &HFB End If Case 1 If (intem1 And &H1) = &H1 Then intem1 = intem1 Or &H2 Else intem1 = intem1 And &HFD End If If intem = &H1 Then `移完第一位后,如果intem是1(即第八位是1) intem1 = intem1 Or &H1 `则将intem1的第一位置1 Else intem1 = intem1 And &HFE `反之置0 End If End Select Next y Next x byteleft = intem1 `将intem1的值返回给函数名 End Function 参照此程序段,不难实现循环右移。 (此程序段在VB5上调试通过。) 广西南宁江南路尾经济技术开发区岸丰电子公司 黄光 |
上一个:VB6内置的内码转换功能
下一个:Visual Basic使用技巧