最近想写个发包软件。比较有兴趣写个游戏的模拟服务器.
可是一开始就遇到问题。
我把寸下来的包换成16进制.
然后写了个函数把他HexToChr 然后winsock发送.可是我拿WPE捕捉到发的包和我的原始数据不一样...仔细看我的HEX TO CHR 也没发现问题。..请大家指点一下..分不是问题。..快郁闷死了。......
'============================================================================
Private Sub winsock1_Connect()
winsock1.SendData HexToChr("04 00 F1 03")
End Sub问题在这里:
但是我捕捉到的发送的数据是 04 00 3F 03 为什么数据变了。?????
'============================================================================
Public Function HexToDec(ByVal HexStr As String) As Double
Dim mult As Double
Dim DecNum As Double
Dim ch As String
Dim i As Integer
mult = 1
DecNum = 0
For i = Len(HexStr) To 1 Step -1
ch = Mid(HexStr, i, 1)
If (ch >= "0") And (ch <= "9") Then
DecNum = DecNum + (Val(ch) * mult)
Else
If (ch >= "A") And (ch <= "F") Then
DecNum = DecNum + ((AscW(ch) - AscW("A") + 10) * mult)
Else
If (ch >= "a") And (ch <= "f") Then
DecNum = DecNum + ((AscW(ch) - AscW("a") + 10) * mult)
Else
HexToDec = 0
Exit Function
End If
End If
End If
mult = mult * 16
Next i
HexToDec = DecNum
End Function'============================================================================
Public Function Hex2Chr(ByVal HexStr As String)
Dim sArr() As String
Dim sArr2() As String
Dim i As Long
Dim X As Long
Dim cal1 As String
Dim cal2 As String
sArr() = Split(LTrim(HexStr), " ")
For i = 0 To UBound(sArr())
cal1 = cal1 & " " & HexToDec(sArr(i))
Next isArr2() = Split(LTrim(cal1), " ")
For X = 0 To UBound(sArr2())
cal2 = cal2 & ChrW(sArr2(X))
Next X
'If Len(cal2) = 1 Then cal2 = "0" & cal2
Hex2Chr = cal2
End Function
可是一开始就遇到问题。
我把寸下来的包换成16进制.
然后写了个函数把他HexToChr 然后winsock发送.可是我拿WPE捕捉到发的包和我的原始数据不一样...仔细看我的HEX TO CHR 也没发现问题。..请大家指点一下..分不是问题。..快郁闷死了。......
'============================================================================
Private Sub winsock1_Connect()
winsock1.SendData HexToChr("04 00 F1 03")
End Sub问题在这里:
但是我捕捉到的发送的数据是 04 00 3F 03 为什么数据变了。?????
'============================================================================
Public Function HexToDec(ByVal HexStr As String) As Double
Dim mult As Double
Dim DecNum As Double
Dim ch As String
Dim i As Integer
mult = 1
DecNum = 0
For i = Len(HexStr) To 1 Step -1
ch = Mid(HexStr, i, 1)
If (ch >= "0") And (ch <= "9") Then
DecNum = DecNum + (Val(ch) * mult)
Else
If (ch >= "A") And (ch <= "F") Then
DecNum = DecNum + ((AscW(ch) - AscW("A") + 10) * mult)
Else
If (ch >= "a") And (ch <= "f") Then
DecNum = DecNum + ((AscW(ch) - AscW("a") + 10) * mult)
Else
HexToDec = 0
Exit Function
End If
End If
End If
mult = mult * 16
Next i
HexToDec = DecNum
End Function'============================================================================
Public Function Hex2Chr(ByVal HexStr As String)
Dim sArr() As String
Dim sArr2() As String
Dim i As Long
Dim X As Long
Dim cal1 As String
Dim cal2 As String
sArr() = Split(LTrim(HexStr), " ")
For i = 0 To UBound(sArr())
cal1 = cal1 & " " & HexToDec(sArr(i))
Next isArr2() = Split(LTrim(cal1), " ")
For X = 0 To UBound(sArr2())
cal2 = cal2 & ChrW(sArr2(X))
Next X
'If Len(cal2) = 1 Then cal2 = "0" & cal2
Hex2Chr = cal2
End Function
Dim cal2 As String
改为
Dim cal2() As byte
试试,不过返回值的时候要用strConv转换一下。Public Function Hex2Chr(ByVal HexStr As String)as byte()
Dim mult As Double
Dim DecNum As Double
Dim ch As String
Dim i As Integer
mult = 1
DecNum = 0
For i = Len(HexStr) To 1 Step -1
ch = Mid(HexStr, i, 1)
If (ch >= "0") And (ch <= "9") Then
DecNum = DecNum + (Val(ch) * mult)
Else
If (ch >= "A") And (ch <= "F") Then
DecNum = DecNum + ((AscW(ch) - AscW("A") + 10) * mult)
Else
If (ch >= "a") And (ch <= "f") Then
DecNum = DecNum + ((AscW(ch) - AscW("a") + 10) * mult)
Else
HexToDec = 0
Exit Function
End If
End If
End If
mult = mult * 16
Next i
HexToDec = DecNum
End Function忘了发这个了.补上.麻烦大家继续...
Ret=Hexvar & ""
Hex2Dec:
Ret=HexVar+0.00