'就是将数据转换为16进制数.'再每二位二位放至数组中.Option ExplicitPrivate Sub Command1_Click() Dim Data As Long Dim HData As String Data = 123456789 HData = ConverTenToN(Data, 16, "0123456789ABCDEF")
If Len(HData) Mod 2 = 1 Then HData = "0" & HData End If Dim Arr() As Byte ReDim Arr(1 To Len(HData) / 2) As Byte
Dim i As Long
For i = 1 To Len(HData) / 2 Arr(i) = "&H" & Mid(HData, i * 2 - 1, 2) Next
For i = 1 To Len(HData) / 2 MsgBox Arr(i) NextEnd Sub '************************************* '目的:将10进制数转换为N进制数
'输入: Ten 要转换的十进制数 ' N N进制数 ' Chr N进制数的字符集
'返回: 成功 转换后的数据 ' 失败 ""
'*************************************Private Function ConverTenToN(ByVal Ten As Long, ByVal N As Long, ByVal Chr As String) As String If N <= 1 Then Exit Function If Len(Chr) < N Then Exit Function While Ten <> 0 ConverTenToN = Mid(Chr, (Ten Mod N) + 1, 1) & ConverTenToN Ten = Int(Ten / N) Wend End Function
上面写错了,是想把integer或long转成四个字节的字节数组.
Integer或 Long都可以的.想把这个转成四个字节的字节数组
如果是Integer数据类型: Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Sub Command1_Click() Dim a As Integer Dim i As Integer Dim ByteSj(1) As Byte a = 15769 CopyMemory ByteSj(0), a, 2 For i = 0 To 1 Print ByteSj(i) Next End Sub如果是Long数据类型: Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Sub Command1_Click() Dim a As Long Dim i As Integer Dim ByteSj(3) As Byte a = -2515769 CopyMemory ByteSj(0), a, 4 For i = 0 To 3 Print ByteSj(i) Next End Sub
'就是将数据转换为16进制数.'再每二位二位放至数组中.Option ExplicitPrivate Sub Command1_Click()
Dim Data As Long
Dim HData As String
Data = 123456789
HData = ConverTenToN(Data, 16, "0123456789ABCDEF")
If Len(HData) Mod 2 = 1 Then
HData = "0" & HData
End If
Dim Arr() As Byte
ReDim Arr(1 To Len(HData) / 2) As Byte
Dim i As Long
For i = 1 To Len(HData) / 2
Arr(i) = "&H" & Mid(HData, i * 2 - 1, 2)
Next
For i = 1 To Len(HData) / 2
MsgBox Arr(i)
NextEnd Sub
'*************************************
'目的:将10进制数转换为N进制数
'输入: Ten 要转换的十进制数
' N N进制数
' Chr N进制数的字符集
'返回: 成功 转换后的数据
' 失败 ""
'*************************************Private Function ConverTenToN(ByVal Ten As Long, ByVal N As Long, ByVal Chr As String) As String
If N <= 1 Then Exit Function
If Len(Chr) < N Then Exit Function
While Ten <> 0
ConverTenToN = Mid(Chr, (Ten Mod N) + 1, 1) & ConverTenToN
Ten = Int(Ten / N)
Wend
End Function
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Sub Command1_Click()
Dim a As Integer
Dim i As Integer
Dim ByteSj(1) As Byte
a = 15769
CopyMemory ByteSj(0), a, 2
For i = 0 To 1
Print ByteSj(i)
Next
End Sub如果是Long数据类型:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Sub Command1_Click()
Dim a As Long
Dim i As Integer
Dim ByteSj(3) As Byte
a = -2515769
CopyMemory ByteSj(0), a, 4
For i = 0 To 3
Print ByteSj(i)
Next
End Sub
Integer是2字节数据,16位
Long是4字节数据,32位
2者不能混淆,否则翻转时考虑不周会出错。
'返回的数据是 Arr(0)=1 Arr(1)=0'如果用16进制表示为 01*256+00 即256 的16进制是0100
'再如 Data=624
'返回的数据是 Arr(0)=2 Arr(1)=112'如果用16进制表示为 02*256+112 即624 的16进制是0270 112的十六进制是 70'再如 Data= 100000
'返回的数据是 Arr(0)=1 Arr(1)=134 Arr(2)=160'如果用16进制表示为 01*256*256+134*256+160 即100000 的16进制是0186A0
fvflove 你的那段有 点小问题,计算出来的数组倒了.
API函数CopyMemory可处理SINGLE及DOUBLU浮点小数,详细可参阅本人BLOGhttp://blog.csdn.net/zdingyun/archive/2008/06/09/2528026.aspx “VB的浮点数处理”一文。