首先看下我的程序
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显示
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显示
解决方案 »
- 数组问题
- [求助] 大家能否帮我注释下?
- IMCFile
- 求助 急 不知道怎么 回事高手指教
- 关于WORD和EXCEL的两个问题,高分求救!!!
- 一个问题 “怎么才能取一个文件的创建时间”
- To welon(辉哥),你要的XP Icon在98/Me下读取工具写好了,请测试!其它人也可以帮助测试!
- 请教一个网络安全问题,我在网上有一台计算机打开一个端口,比如8000端口,开始监听.
- 不满CSDN对于没有解决问题的帖子要扣除信誉分,所以散去11000多分,从此不再入CSDN论坛一步。(继续散分)还有10459分,要分的快进来。
- 有没有用VB当示例的WINDOWS核心编程的书籍
- 请教VB的两个表间的查询问题(急)
- 关于音频数据写入芯片的接口问题
2A040AFEFE00FEFEFEFEFEFE3F2A
这数据里面不会在出现2A了
只有2A0202042B3032382E31326F43403035332E383025开头的2A
和2A040AFEFE00FEFEFEFEFEFE3F2A的开头和结尾的2A
别不会再出现2A
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
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
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