谁有把字节数组转换成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

解决方案 »

  1.   

    to jlum99(闲人):
    GetLen就是取字符串的长度函数Public Function GetLen(ByVal strSrc As String) As Long
    Dim strNewStr As String
    strNewStr = StrConv(strSrc, vbFromUnicode)
    GetLen = LenB(strNewStr)
    End Function跟踪可知该函数所得的结果是正确的
      

  2.   

    to all:
    测试的ByteArray可以用:
    164,139,12,33,
    111,60,195,123,
    42,74,91,190,
    34,190,219,154
      

  3.   

    vb6中好像没有,不过.net中有,代码如下:
    dim bytes() as byte
    dim str as stirng
    str = System.Text.Encoding.ASCII.GetString(bytes)'将字接转化为字符
    bytes=system.text.encoding.ascii.getstring(str)  '将字符转化为字节
      

  4.   

    to jary12581(狼):

    要是直接有我就不用跑来问了,我要的是VB的呀,
    java中我也知道有,。
      

  5.   

    to all:
    为了方便测试,现把测试子函数也列出来,大家一测就知道了
    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
      

  6.   

    更简洁的测试代码如下(请帮忙修改ByteToStr,StrToByte这两个函数,使得输出正确):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)
    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