2013-03-05 42 views
0

我用VB6非常陌生,所以请原谅的菜鸟问题:字节档/铸造VB6

我试图把一个长成它的分量字节。在C中,由于自动截断和位移运算符很简单。对于我的生活,我无法弄清楚如何在VB6中做到这一点。

尝试到目前为止都通常看起来是这样的

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

1和系统2被声明为Byte和sys作为Long

我得到一个类型不匹配的例外,当我尝试声明做这个。任何人都知道如何将Long转换为4 Byte s ??

谢谢

回答

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

找到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 
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