首先看下我的程序
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String
    Dim TextBoxTmp As String
    Dim buffer() As Byte
    Winsock1.GetData strData, vbArray Or vbByte 'vbString
    TextBoxTmp = TextBoxTmp & strData
    buffer() = StrToHex(TextBoxTmp)
    '我需要用数组,不是字符串
    'MsgBox buffer() 调试用的
    Text1.Text =buffer()
End Sub
下面函数是转换位16进制显示的
Public Function StrToHex(ByVal S As String) As String
On Error Resume Next
Dim ByteArr() As Byte
ByteArr = StrConv(S, vbFromUnicode)
Dim Temps As String
Dim Temp As Byte
Dim i As Long
Dim outs As String
For i = 0 To UBound(ByteArr)
Temp = ByteArr(i)
Temps = Hex(Temp)
Temps = Right("00" & Temps, 2)
outs = outs & Temps
Next
StrToHex = outs
End Function
   其中的 Text1.Text 中出现2中数据帧
2A0202042B3032382E31326F43403035332E383025
2A040AFEFE00FEFEFEFEFEFE3F2A
这2种帧的数据现在都能读到
现在关键要吧这2种数据类型分开来分别放在Text2.Text和Text3.Text中
处理的思路是:首先判断帧头是2A的数据,是2A的取出来然后判断后面的是02还是04,是02的在Text2.Text显示,是04的在Text3.Text显示

解决方案 »

  1.   

    2A0202042B3032382E31326F43403035332E383025
    2A040AFEFE00FEFEFEFEFEFE3F2A
    这数据里面不会在出现2A了
    只有2A0202042B3032382E31326F43403035332E383025开头的2A
    和2A040AFEFE00FEFEFEFEFEFE3F2A的开头和结尾的2A
    别不会再出现2A
      

  2.   

    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
        Dim strData As String
        Dim TextBoxTmp As String
        Dim buffer() As Byte
        Winsock1.GetData strData, vbArray Or vbByte 'vbString
        TextBoxTmp = TextBoxTmp & strData
        buffer() = StrToHex(TextBoxTmp)
        '我需要用数组,不是字符串
        'MsgBox buffer() 调试用的
        If buffer(0)=&H32 And Buffer(1) = &H41 Then
            If buffer(3) = &H32 Then
                Text2 = buffer
            Else
                Text3 = buffer
            End If    Else
            Text1.Text =buffer()
        End If
    End Sub
      

  3.   

    Private Sub StrToT2T3(outs As String)
      Dim t2 As String, t3 As String, strt() As String, strt2() As String
      Dim i As Long, j As Long
      strt = Split(outs, "2A02")
      For i = 0 To UBound(strt)
        strt2 = Split(strt(i), "2A04")
        If UBound(strt2) > 0 Then
          t2 = t2 & "2A02" & strt2(0)
        End If
        For j = 1 To UBound(strt2)
          t3 = t3 & "2A04" & strt2(j)
        Next
      Next
      Text2 = t2
      Text3 = t3
    End Sub
      

  4.   

    Option Explicit
      Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    Dim buffer() As Byte
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
        Dim Data() As Byte
       Dim strData As String
       Dim buffer2() As Byte
       Dim i As Integer
       Dim BufBound As Integer
       buffer = ""
        Winsock1.GetData Data, vbArray Or vbByte
        If UBound(Data()) < 0 Then
            MsgBox "exit"
            Exit Sub
        End If
       
        If UBound(buffer) < 0 Then
          buffer = Data
        Else
          ReDim buffer2(UBound(buffer) + UBound(Data) + 1) As Byte
          CopyMemory ByVal VarPtr(buffer2(0)), ByVal VarPtr(buffer(0)), UBound(buffer) + 1
          CopyMemory ByVal VarPtr(buffer2(UBound(buffer) + 1)), ByVal VarPtr(Data(0)), UBound(Data) + 1
          buffer = buffer2
        End If
       'If buffer(UBound(buffer())) = 42 Then
        BufBound = UBound(buffer())
        'MsgBox buffer(BufBound - 19)
        'CopyMemory VarPtr(buffer(UBound(buffer))), VarPtr(strData()), UBound(strData)
       'MsgBox buffer(BufBound - 12)
       ' MsgBox strData(1)
       ' MsgBox UBound(strData())
        'MsgBox DECtoHEX(strData(1))
        'TextTmp = TextTmp & StrConv(strData(), vbUnicode)
        'buffer() = StrToHex(TextTmp)
        
       If BufBound > 12 Then
         If buffer(BufBound - 12) = &H4 Then
          Text4.Text = StrToHex(StrConv(buffer(), vbUnicode))
           BufBound = BufBound - 14
        'ext5.Text = TextTmp
        End If
       End If
      If BufBound > 19 Then
        If buffer(BufBound - 19) = &H2 Then
           Text5.Text = StrToHex(StrConv(buffer(), vbUnicode))
           BufBound = BufBound - 21    End If
      End If 
    End Sub
    Public Function StrToHex(ByVal s As String) As String
    On Error Resume Next
    Dim ByteArr() As Byte
    ByteArr = StrConv(s, vbFromUnicode)
    Dim Temps As String
    Dim Temp As Byte
    Dim i As Long
    Dim outs As String
    For i = 0 To UBound(ByteArr)
    Temp = ByteArr(i)
    Temps = Hex(Temp)
    Temps = Right("00" & Temps, 2)
    outs = outs & Temps
    Next
    StrToHex = outs
    End Function
      

  5.   

    我会很小心用StrConv,用CopyMemory吧.