谁有把字节数组转换成String,以及把String转换成ByteArray的函数啊。
不要告诉我用strconv(,vbfromunicode)及strconv(,vbunicdoe)可以啊,因为我试了把一个ByteArray通过它们转换后发现ByteArray并不是原来的ByteArray了我也试着用CopyMemory,竟然也不行,哪位能救救我呢??附CopyMemory的源码如下:
'string to byte array using CopyMemory API*
Public Sub StrToByte(text As String, bArray() As Byte)
Dim lText As Long
lText = GetLen(text) + 1
ReDim bArray(0 To lText - 1)
Call CopyMemory(bArray(0), ByVal text, lText)
End Sub
'byte array to string using CopyMemory API*
Public Sub ByteToStr(bArray() As Byte, text As String)
Dim lText As Long
lText = UBound(bArray) + 1
text = Space(lText)
Call CopyMemory(ByVal text, bArray(0), lText)
End Sub
不要告诉我用strconv(,vbfromunicode)及strconv(,vbunicdoe)可以啊,因为我试了把一个ByteArray通过它们转换后发现ByteArray并不是原来的ByteArray了我也试着用CopyMemory,竟然也不行,哪位能救救我呢??附CopyMemory的源码如下:
'string to byte array using CopyMemory API*
Public Sub StrToByte(text As String, bArray() As Byte)
Dim lText As Long
lText = GetLen(text) + 1
ReDim bArray(0 To lText - 1)
Call CopyMemory(bArray(0), ByVal text, lText)
End Sub
'byte array to string using CopyMemory API*
Public Sub ByteToStr(bArray() As Byte, text As String)
Dim lText As Long
lText = UBound(bArray) + 1
text = Space(lText)
Call CopyMemory(ByVal text, bArray(0), lText)
End Sub
GetLen就是取字符串的长度函数Public Function GetLen(ByVal strSrc As String) As Long
Dim strNewStr As String
strNewStr = StrConv(strSrc, vbFromUnicode)
GetLen = LenB(strNewStr)
End Function跟踪可知该函数所得的结果是正确的
测试的ByteArray可以用:
164,139,12,33,
111,60,195,123,
42,74,91,190,
34,190,219,154
dim bytes() as byte
dim str as stirng
str = System.Text.Encoding.ASCII.GetString(bytes)'将字接转化为字符
bytes=system.text.encoding.ascii.getstring(str) '将字符转化为字节
晕
要是直接有我就不用跑来问了,我要的是VB的呀,
java中我也知道有,。
为了方便测试,现把测试子函数也列出来,大家一测就知道了
Private Sub Command1_Click()
Dim b1() As Byte
Dim s1 As String
Dim bTemp As Variant
Dim iTemp As Long
Dim sMsg As String
ReDim b1(0 To 15)
bTemp = Array( _
164, 139, 12, 33, _
111, 60, 195, 123, _
42, 74, 91, 190, _
34, 190, 219, 154)
For iTemp = 0 To 15
b1(iTemp) = bTemp(iTemp)
Next
Call ByteToStr(b1, s1)
Call StrToByte(s1, b1)
sMsg = ""
For iTemp = 0 To 3
sMsg = sMsg + CStr(b1(iTemp)) + ","
Next
sMsg = sMsg + vbCrLfFor iTemp = 4 To 7
sMsg = sMsg + CStr(b1(iTemp)) + ","
Next
sMsg = sMsg + vbCrLfFor iTemp = 8 To 11
sMsg = sMsg + CStr(b1(iTemp)) + ","
Next
sMsg = sMsg + vbCrLfFor iTemp = 12 To 15
sMsg = sMsg + CStr(b1(iTemp)) + ","
Next
sMsg = sMsg + vbCrLfMsgBox sMsg
End Sub
Dim b1() As Byte
Dim s1 As String
Dim bTemp As Variant
Dim iTemp As Long
Dim sMsg As String
ReDim b1(0 To 15)bTemp = Array( _
164, 139, 12, 33, _
111, 60, 195, 123, _
42, 74, 91, 190, _
34, 190, 219, 154)For iTemp = 0 To 15
b1(iTemp) = bTemp(iTemp)
NextCall ByteToStr(b1, s1)
Call StrToByte(s1, b1)sMsg = ""For iTemp = 0 To 15
sMsg = sMsg + CStr(b1(iTemp)) + ","
If iTemp Mod 4 = 3 Then
sMsg = sMsg + vbCrLf
End If
NextMsgBox sMsg'164, 139, 12, 33,
'111, 60, 195, 123,
'42, 74, 91, 190,
'34, 190, 219, 154,End Sub