前段时间我发过贴问IP转换成数字的问题。现在重复一次问题。
这个问题应用再SyGate的EventLog.mdb数据库中,这个数据库用来记录上网的IP.网站的IP.端口等,但是IP记录并不是直接把IP记下来,而是把IP转换成数字再保存。
如192.168.1.218就会被记录-637425472
问两者之间的转换

解决方案 »

  1.   

    字符串到地址
    private Declare Function inet_addr Lib "wsock32.dll" (ByVal cp As String) As Longdim ip as string
    ip = "192.168.1.111"
    dim i as long
    i = inet_addr(IP)地址到字符串private Declare Function inet_ntoa Lib "wsock32.dll" (ByVal addr As Long) As Long
    private Declare Function lstrcpyA Lib "kernel32"  (ByVal RetVal As String,   ByVal Ptr As Long) As Long
    private Declare Function lstrlenA Lib "kernel32"  (ByVal Ptr As Any) As Longprivate Function GetIPFromAddress(Address As Long) As String
    Dim ptrString As Long
    ptrString = inet_ntoa(Address)
    GetIPFromAddress = GetStrFromPtrA(ptrString)
    End Function
    private Function GetStrFromPtrA(ByVal lpszA As Long) As String
    GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)
    Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)
    End Function
      

  2.   

    例子Option ExplicitPrivate Declare Function inet_ntoa Lib "wsock32.dll" (ByVal addr As Long) As Long
    Private Declare Function lstrcpyA Lib "kernel32" (ByVal RetVal As String, ByVal Ptr As Long) As Long
    Private Declare Function lstrlenA Lib "kernel32" (ByVal Ptr As Any) As Long
    Private Declare Function inet_addr Lib "wsock32.dll" (ByVal cp As String) As LongPrivate Function GetIPFromAddress(Address As Long) As String
      
      Dim ptrString As Long
      
      ptrString = inet_ntoa(Address)
      GetIPFromAddress = GetStrFromPtrA(ptrString)
      
    End Function
    Private Function GetStrFromPtrA(ByVal lpszA As Long) As String  GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)
      Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)
      
    End Function
    Private Sub Command1_Click()
        Dim i As Long
        i = inet_addr("192.168.1.218")
        Debug.Print i
        Debug.Print GetIPFromAddress(i)
    End Sub