我这里有一个3维byte型数组,是存储位图数据的,但是在分析数据的时候,我想把他们都转换成long型来计算,我想问问有没有办法在vb中直接把这个数组转换成long型,clng貌似不顶用,除了每个成员逐个转换外
解决方案 »
- ...VB6 怎样获取JPG文件的颜色模式(cmyk和rgb)和图片大小,单位必须是cm???
- 为什么在ie地址栏输入访问http://ishare.iask.sina.com.cn明明是对的,可是用webbrowser.navigate却说页面不存在
- 我用MSComm接收的时候有时候收到break中断信号,请问在什么情况下会产生中断信号的呢?
- 导入数据库中文出现乱码如何解决
- 怎样才能向表中添加字段?
- 请教如何得到一个可以直接编辑其中数据的数据表格或报表啊!!!急!
- Ado中搜索纪录问题
- 一个小问题
- 急事!!!救命!@!!!!!1
- 如何给安装包加注册号。(根据机器序列号或别的)----加分中
- Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
- 求一算法,早上高一点的请进。
Dim b(2) As Byte
Dim lRlt As Long
' b数组 中的字节顺序要与 Long 类型的内存字节序一致
b(0) = &H12
b(1) = &H34
b(2) = &H56
Call GetMem4(VarPtr(b(0)), lRlt)
lRlt = lRlt And &HFFFFFF ' 把最高字节屏蔽掉
MsgBox Hex$(lRlt), 64 ' 输出:563412
End Sub
dim a(4) as byte
a(0)=1
a(1)=2
a(2)=3
a(3)=4
a(4)=5
然后因为数组a()是byte,我想把他变成long,但是无论维数,还是里面的每个成员的值都不变,也就是说从a(0)到a(4)还是1,2,3,4,5但是是long型的
不过我要提醒你一下,你这个测速肯定是要编译成EXE后测试,你别在VBIDE里测,那不是执行的编译后的机器码,速度会慢很多的
ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Length As Long)'ByteArray()为要转换的Byte数组
'LongArray()为接收转换后数据的Long数组,下标从0开始,最好定义为可变数组,或传入的数组长度必须能容纳Byte数组,否则内存将会越界
'成功返回True,失败(字节数组长度不是4的倍数或为空)返回False
Private Function TransByteArrayToLongArray(ByteArray() As Byte, LongArray() As Long) As Boolean
Dim ByteArrayLen As Long
On Error Resume Next
ByteArrayLen = UBound(ByteArray) - LBound(ByteArray) + 1
If Err.Number = 0 And ByteArrayLen > 0 And ByteArrayLen Mod 4 = 0 Then
ReDim LongArray(ByteArrayLen / 4 - 1)
CopyMemory ByVal VarPtr(LongArray(0)), ByVal VarPtr(ByteArray(LBound(ByteArray))), ByteArrayLen
TransByteArrayToLongArray = True
End If
End Function'测试
Private Sub Command1_Click()
Dim a(7999) As Byte, b() As Long
Dim i As Integer
For i = 0 To 7999
a(i) = i Mod &H100
Next i
TransByteArrayToLongArray a, b
For i = 0 To UBound(b)
Debug.Print Hex(b(i))
Next i
End Sub
其实如果不考虑转换会出错及越界的可能,数组下标又确定是从0开始的话,只需要一条语句就行了:CopyMemory ByVal VarPtr(长整型数组(0)), ByVal VarPtr(字节数组(0)), 字节数组长度
b(0)=a(0):b(1)=a(1):b(2)=a(2):b(3)=a(3)