2个问题

shuaishen12 2005-05-20 03:00:51
1.Integer 或者 Long 怎么转换成 Byte数组?
2.Dim bt1() As Byte
Dim bt2(1) As Byte
ReDim bt1(1)
bt1(0) = 1
bt1(1) = 2
bt2(0) = 3
bt2(1) = 4
ReDim bt1(3)

如果不使用循环方法 能不能有其他方法 得到结果
bt1(0) = 1
bt1(1) = 2
bt1(2) = 3
bt1(3) = 4
...全文
124 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuaishen12 2005-05-20
  • 打赏
  • 举报
回复
private sub A()
dim lng as Long
lng = 123456
dim byt(3) as byte
byt = lngtobyte (lng)
End sub

Private Function LngToByte(lng As Long) As Byte()
Dim byt(3) As Byte
CopyMemory VarPtr(byt(0)), VarPtr(lng), 4
LngToByte = byt
End Function

这样会有错误的结果返回么?
shuaishen12 2005-05-20
  • 打赏
  • 举报
回复
那如果去掉下面这两句的话 结果就有可能是错误的吗?
strH = Hex(lng1)
'加这一句,不足8位前面补0
If Len(strH) < 8 Then strH = String(8 - Len(strH), "0") & strH
viena 2005-05-20
  • 打赏
  • 举报
回复
Dim lng1 As Long, strH As String
lng1 = -47565909
strH = Hex(lng1)
'加这一句,不足8位前面补0
If Len(strH) < 8 Then strH = String(8 - Len(strH), "0") & strH
Dim abyte(3) As Byte
Dim i As Long
For i = 0 To UBound(abyte)
abyte(i) = CByte("&H" & Mid(strH, i * 2 + 1, 2))
Next
viena 2005-05-20
  • 打赏
  • 举报
回复
sorry,上面的有漏洞,不能保证转为16进制字符串后,每个字节都占两位
viena 2005-05-20
  • 打赏
  • 举报
回复
1.Long转Byte数组还可以这样:

Dim lng1 As Long, strH As String
lng1 = -47565909
strH = Hex(lng1)
Dim abyte(3) As Byte
Dim i As Long
For i = 0 To UBound(abyte)
abyte(i) = CByte("&H" & Mid(strH, i * 2 + 1, 2))
Next
shuaishen12 2005-05-20
  • 打赏
  • 举报
回复
谢谢 基本上明白了
viena 2005-05-20
  • 打赏
  • 举报
回复
要注意在这里CopyMemory的前两个参数,声明为ByRef(不写的话默认为ByRef)
从bt2的第一个元素的地址复制两个字节到bt1的第三个元素的地址

如果数组不是很大的话,还是用循环好一些
viena 2005-05-20
  • 打赏
  • 举报
回复
要注意在这里CopyMemory的前两个参数,声明为ByRef(不写的话默认为ByRef)
从bt2的第一个元素的地址复制两个字节到bt1的第三个元素的地址

如果数组不是很大的话,还是用循环好一些
viena 2005-05-20
  • 打赏
  • 举报
回复
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Sub Command1_Click()
Dim bt1() As Byte
Dim bt2(1) As Byte
ReDim bt1(1)
bt1(0) = 1
bt1(1) = 2
bt2(0) = 3
bt2(1) = 4
ReDim Preserve bt1(3) 'Preserve关键字指定保留动态数组的内容,否则内容丢失

Call CopyMemory(bt1(2), bt2(0), 2)

Dim i As Long
For i = 0 To UBound(bt1)
Debug.Print bt1(i)
Next

Erase bt1 '释放动态数组
End Sub
viena 2005-05-20
  • 打赏
  • 举报
回复
第2个问题也是用CopyMemory
shuaishen12 2005-05-20
  • 打赏
  • 举报
回复
谢谢

第2个问题有无其他解决办法?

yankao 2005-05-20
  • 打赏
  • 举报
回复
长知识!路过学习!
TechnoFantasy 2005-05-20
  • 打赏
  • 举报
回复
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)


Private Sub Command3_Click()
Dim b(4) As Byte
Dim l As Long


l = &HFD2A33AB
CopyMemory VarPtr(b(0)), VarPtr(l), 4
Debug.Print b(0), b(1), b(2), b(3)
End Sub
TechnoFantasy 2005-05-20
  • 打赏
  • 举报
回复
楼主的意思是不是说,假设有一个long型值:&HFD2A33AB ,转换成4个byte:

&HFD &H2A &H33 &HAB

如果是这样可以通过api函数copymemory来完成
shuaishen12 2005-05-20
  • 打赏
  • 举报
回复
第一个 Private Sub b()
Dim byt() As Byte
Dim i As Integer
i = 1234
'i怎么放到byt数组里面
a byt
End Sub

Private Sub a(byt() As Byte)

End Sub

第2个 其实应该是想问 除了循环 还有没其他方法 直接将两个数组合并
DooDu 2005-05-20
  • 打赏
  • 举报
回复
1.byte的范围:0-255,不知道楼主说的转换是什么意思?
2.是赋值操作吗?让元素值等于其下标值?如果是,就只能循环赋值了。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧