字节移位/铸造VB6

时间:2013-03-05 18:18:22

标签: vb6 byte

我对VB6非常不熟悉所以请原谅新手问题:

我试图将长时间转换为它的组件字节。在C中它很简单,因为自动截断和位移操作符。对于我的生活,我无法弄清楚如何在VB6中这样做。

到目前为止,所有尝试都看起来像这样

sys1 = CByte(((sys & &HFF000000) / 16777216))   ' >> 24
sys2 = CByte(((sys & &HFF0000) / 65536))      ' >> 16 

sys1和sys2声明为Byte,sys声明为Long

当我尝试这样做时,我遇到了类型不匹配的异常。有人知道如何将Long转换为4 Byte s ??

由于

3 个答案:

答案 0 :(得分:4)

你划分正确,但你忘了只掩盖最低有效位。

提供要分成字节的单词,索引(0表示最不重要,1表示下一个,等等)

Private Function getByte(word As Long, index As Integer) As Byte
    Dim lTemp As Long
    ' shift the desired bits to the 8 least significant
    lTemp = word / (2 ^ (index * 8))
    ' perform a bit-mask to keep only the 8 least significant
    lTemp = lTemp And 255
    getByte = lTemp
End Function

答案 1 :(得分:1)

FreeVBCode.com上找到。未经测试,抱歉。

Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal _
Length As Long)

Public Function LongToByteArray(ByVal lng as Long) as Byte()

'Example:
'dim bytArr() as Byte
'dim iCtr as Integer
'bytArr = LongToByteArray(90121)
'For iCtr = 0 to Ubound(bytArr)
   'Debug.Print bytArr(iCtr)
'Next
'******************************************
Dim ByteArray(0 to 3)as Byte
CopyMemory ByteArray(0), Byval VarPtr(Lng),Len(Lng) 
LongToByteArray = ByteArray

End Function

答案 2 :(得分:0)

您可以通过组合UDT和LSet语句在简单值类型和字节数组之间进行转换。

Option Explicit

Private Type DataBytes
    Bytes(3) As Byte
End Type

Private Type DataLong
    Long As Long
End Type

Private DB As DataBytes
Private DL As DataLong

Private Sub cmdBytesToLong_Click()
    Dim I As Integer

    For I = 0 To 3
        DB.Bytes(I) = CByte("&H" & txtBytes(I).Text)
    Next
    LSet DL = DB
    txtLong.Text = CStr(DL.Long)

    txtBytes(0).SetFocus
End Sub

Private Sub cmdLongToBytes_Click()
    Dim I As Integer

    DL.Long = CLng(txtLong.Text)
    LSet DB = DL
    For I = 0 To 3
        txtBytes(I).Text = Right$("0" & Hex$(DB.Bytes(I)), 2)
    Next

    txtLong.SetFocus
End Sub