关于变量类型转换的有关问题

关于变量类型转换的问题我有一个字节数组mData,我想将其转换成Long数组,不知道如何实现,注意,一个Long类型

关于变量类型转换的问题
我有一个字节数组mData,我想将其转换成Long数组,不知道如何实现,

注意,一个Long类型的变量在mData数组中是按低低,低高,高低,高高的形式进行存储的,转换时也需要注意这个问题。

[解决办法]

VB code
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Function ByteArray2LongArray(ByteArray() As Byte) As Long()    Dim ByteSize As Long    Dim LongSize As Long    Dim ByteAddress As Long    Dim LongArray() As Long    Erase ByteArray2LongArray    ByteAddress = LBound(ByteArray)    ByteSize = UBound(ByteArray) - ByteAddress + 1    If ByteSize Mod 4 <> 0 Then        Exit Function    End If    LongSize = ByteSize / 4 - 1    ReDim LongArray(LongSize)    CopyMemory LongArray(0), ByteArray(ByteAddress), ByteSize    ByteArray2LongArray = LongArrayEnd FunctionPrivate Sub Command1_Click()    Dim ByteArrayTest() As Byte    Dim LongArrayText() As Long    Dim LongSize As Long    Dim strPrint As String    Dim i As Long        ReDim ByteArrayTest(7)    '第一个 Long 内容    ByteArrayTest(0) = &H0    ByteArrayTest(1) = &H11    ByteArrayTest(2) = &H22    ByteArrayTest(3) = &H33        '第二个 Long 内容    ByteArrayTest(4) = &H44    ByteArrayTest(5) = &H55    ByteArrayTest(6) = &H66    ByteArrayTest(7) = &H77        LongArrayText = ByteArray2LongArray(ByteArrayTest)    LongSize = UBound(LongArrayText)    For i = 0 To LongSize        If i = 0 Then            strPrint = String(8 - Len(Hex(LongArrayText(i))), "0") & Hex(LongArrayText(i))        Else            strPrint = strPrint & vbCrLf & String(8 - Len(Hex(LongArrayText(i))), "0") & Hex(LongArrayText(i))        End If    Next i    MsgBox strPrintEnd Sub
[解决办法]
不知道确切需求,如果单纯数字考虑,没有必要考虑那么底层的东西。
VB code
Option ExplicitPrivate Sub Form_Load()Dim a(254) As ByteDim b(254) As LongDim i As ByteFor i = 0 To 254    a(i) = iNextFor i = 0 To 254    b(i) = a(i)Nextb(253) = 46445782Debug.Print b(253)Debug.Print b(254)End Sub
[解决办法]
VB code
'这里是API函数定义Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)'将字节数组转换为长整型数组的函数及过程Private Function ByteArray2LongArray(ByteArray() As Byte) As Long()    '函数内的变量定义    Dim ByteSize As Long    Dim LongSize As Long    Dim ByteAddress As Long    Dim LongArray() As Long        '初始化变量    Erase ByteArray2LongArray           '设置默认返回一个空数组    ByteAddress = LBound(ByteArray)     '取得传递进来的字节数组最小边界数    '计算传递进来的字节数组大小,最大边界数-最小边界数+1=数组大小    ByteSize = UBound(ByteArray) - ByteAddress + 1    '因为Long类型是 4 个字节为单位的,所以如果传递进来的字节数组大小应该    '是 4 的倍数,用求余数的方法,可以判断传递进来的参数是否符合规范    If ByteSize Mod 4 <> 0 Then        '不符合规范的参数,不做处理,默认返回个空数组        Exit Function    End If        '计算 Long 数组应该分配的空间大小,因为这里数组从0开始,所以需要 -1    LongSize = ByteSize / 4 - 1        ReDim LongArray(LongSize)   '分配要存储数据的 Long 数组大小        '************************************************************    '这里是关键地方:在这里,用 CopyMemory 这个 API 函数,直接把    '字节数组里的数据复制到 Long 数组中    '************************************************************    CopyMemory LongArray(0), ByteArray(ByteAddress), ByteSize        '返回存储在 LongArray 数组变量给函数    ByteArray2LongArray = LongArrayEnd Function'这里是测试过程,是一个按钮的事件,点击按钮后产生该事件Private Sub Command1_Click()    '函数内的变量定义    Dim ByteArrayTest() As Byte    Dim LongArrayText() As Long    Dim LongSize As Long    Dim strPrint As String    Dim i As Long        ReDim ByteArrayTest(7)    '第一个 Long 内容    ByteArrayTest(0) = &H0    ByteArrayTest(1) = &H11    ByteArrayTest(2) = &H22    ByteArrayTest(3) = &H33        '第二个 Long 内容    ByteArrayTest(4) = &H44    ByteArrayTest(5) = &H55    ByteArrayTest(6) = &H66    ByteArrayTest(7) = &H77        '这里直接调用上面的函数来将字节数组转换为 Long 数组    LongArrayText = ByteArray2LongArray(ByteArrayTest)        '这时 LongArrayText 已经是转换好的 Long 数组了,下面是为了实现查看内容而做的过程    LongSize = UBound(LongArrayText)        '取得 Long 数组最大边界        '开始循环所有 Long 数组的内容,并将其转换为 16 进制文本    For i = 0 To LongSize        If i = 0 Then            '本来用 Hex(LongArrayText(i)) 就可以转换好16进制文本了,但是为了不忽略掉高位的 0            '所以为了格式化文本才用以下方法处理            strPrint = String(8 - Len(Hex(LongArrayText(i))), "0") & Hex(LongArrayText(i))        Else            '因为要分开显示,所以用换行符来分割比较容易展示效果,这里就自动加上换行符            strPrint = strPrint & vbCrLf & String(8 - Len(Hex(LongArrayText(i))), "0") & Hex(LongArrayText(i))        End If    Next i    '输出结果文本    MsgBox strPrint    '结果为:    '33221100    '77665544    '这样可以看到字节的排序    '33 22 11 00    第一个 Long 内容    '77 66 55 44    第二个 Long 内容End Sub