最近想写个发包软件。比较有兴趣写个游戏的模拟服务器.
可是一开始就遇到问题。
我把寸下来的包换成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

解决方案 »

  1.   

    没看到有HexToChr这个过程,肯定是里面有错。
      

  2.   

    HexToChr 中,
    Dim cal2 As String
    改为
    Dim cal2() As byte
    试试,不过返回值的时候要用strConv转换一下。Public Function Hex2Chr(ByVal HexStr As String)as byte()
      

  3.   

    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忘了发这个了.补上.麻烦大家继续...
      

  4.   

    Hex2Chr的问题吧把Hex2Chr贴出来让大家看看啊
      

  5.   

    hoho,眼花了如wolfcapita(绝地苍狼)所说,把它改成传输数组比较妥当
      

  6.   

    HexToChar:
    Ret=Hexvar & ""
    Hex2Dec:
    Ret=HexVar+0.00