看看这个对不对?
Dim lpbyteDataBuf() As Byte
Dim nCardNumber As Long
Public Enum dcShiftDirection
Left = -1
Right = 0
End Enum
Private Sub Form_Load()
ReDim lpbyteDataBuf(1) As Byte
lpbyteDataBuf(0) = CByte(RShift(nCardNumber, 16) And &HFF)
End Sub
Public Function Shift(ByVal lValue As Long, ByVal lNumberOfBitsToShift As Long, ByVal lDirectionToShift As dcShiftDirection) As Long
Const ksCallname As String = "Shift"
On Error GoTo Procedure_Error
Dim LShift As Long
If lDirectionToShift Then 'shift left
LShift = lValue * (2 ^ lNumberOfBitsToShift)
Else 'shift right
LShift = lValue \ (2 ^ lNumberOfBitsToShift)
End If
Procedure_Exit:
Shift = LShift
Exit Function
Procedure_Error:
Err.Raise Err.Number, ksCallname, Err.Description, Err.HelpFile, Err.HelpContext
Resume Procedure_Exit
End Function
Public Function LShift(ByVal lValue As Long, ByVal lNumberOfBitsToShift As Long) As Long
Const ksCallname As String = "LShift"
On Error GoTo Procedure_Error
LShift = Shift(lValue, lNumberOfBitsToShift, Left)
Procedure_Exit:
Exit Function
Procedure_Error:
Err.Raise Err.Number, ksCallname, Err.Description, Err.HelpFile, Err.HelpContext
Resume Procedure_Exit
End Function
Public Function RShift(ByVal lValue As Long, ByVal lNumberOfBitsToShift As Long) As Long
Const ksCallname As String = "RShift"
On Error GoTo Procedure_Error
RShift = Shift(lValue, lNumberOfBitsToShift, Right)
Procedure_Exit:
Exit Function
Procedure_Error:
Err.Raise Err.Number, ksCallname, Err.Description, Err.HelpFile, Err.HelpContext
Resume Procedure_Exit
End Function