0

私はVB6に非常に慣れていないので、新人の質問を許してください:

longをそのコンポーネントバイトに変換しようとしています。Cでは、自動切り捨てとビットシフト演算子があるため、簡単です。私の人生では、VB6でこれを行う方法を理解できません。

これまでの試みはすべて、一般的に次のように見えました

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

sys1とsys2はとして宣言されByte、sysはとして宣言されますLong

これを実行しようとすると、型の不一致の例外が発生します。Long誰もがaを4秒に変換する方法を知っていますかByte

ありがとう

4

3 に答える 3

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
于 2013-03-05T23:50:40.537 に答える
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
于 2013-03-05T20:36:50.590 に答える
0

LSetUDT とステートメントを組み合わせることで、単純な値型とバイト配列の間で変換できます。

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
于 2013-03-05T22:50:10.617 に答える