CString str("192.168.1.2");
BYTE IPAddress[4];
...
怎样产生以下结果:
IPAddress[0]==192
IPAddress[1]==168
IPAddress[2]==1
IPAddress[3]==2字符串转换成数组

解决方案 »

  1.   

    AfxExtractSubString以.分离子串,存到四个字符串中,再取每个字符串的首字符,希望对你有帮助
      

  2.   

    CString的成员函数里面有截取字符串的函数
      

  3.   

    int len=str.Find(".",0);
    CString tmp = str.Left(len);
    CString leftStr = str.Right(str.GetLength()-len-1);

    通过此方法依次取出没节字符串;并把tmp中内容转换成BYTE类型,然后赋值给BYTE数组。
      

  4.   

    lz为什么要把ipaddress转换成byte类型呢,我把它转换为了int型。
    public class Test { public static void main(String[] args) {

    String str="192.168.1.2"; 
    String[] temp = str.split("\\.");

    /* for(String str2:temp) {
    System.out.println(str2);
    }*/

    int[] ipAddress = new int[temp.length];

    for(int j=0;j<ipAddress.length;j++) {
    ipAddress[j] = Integer.parseInt(temp[j]);
    }

    for(int tt:ipAddress) {
    System.out.println(tt);
    }
    }
    }
      

  5.   

    不是UNICODE的话直接用inet_addr()转换; CString str1("192.168.0.1");
    BYTE ip[4]; *(ULONG*)ip = inet_addr(str1.GetBuffer());
    UNICODE用WSAStringToAddress()转换.
    CString str(TEXT("192.168.1.2"));
    BYTE IPAddress[4];
    INT nLen = sizeof(sockaddr);
    WSADATA  WSAData;
    SOCKADDR_IN SockAddr; WSAStartup(MAKEWORD(2, 2), &WSAData);
    ::WSAStringToAddress(str.GetBuffer(), AF_INET, NULL, (LPSOCKADDR)&SockAddr, &nLen);
    *(ULONG*)IPAddress = SockAddr.sin_addr.S_un.S_addr;
      

  6.   

    *(ULONG*)ip = inet_addr(str1.GetBuffer());
    这个用法值得学习,比较强悍
      

  7.   

    CString str("192.168.1.2");
    char* buf = NULL;
    BYTE IPAddress[4] = {0};
    #ifdef UNICODE
    int len = WideCharToMultiByte(CP_ACP, 0, str, -1, buf, 0, NULL, NULL);
    buf = new char[len];
    memset(buf, 0, len);
    WideCharToMultiByte(CP_ACP, 0, str, -1, buf, len, NULL, NULL);
    #else
    int len = str.GetLength() + 1;
    buf = new char[len];
    memset(buf, 0, len);
    sprintf(buf, "%s", str);
    #endif
    SOCKADDR_IN addr;
    memset(&addr, 0, sizeof(addr));
    addr.sin_addr.S_un.S_addr = inet_addr(buf);
    IPAddress[0] = addr.sin_addr.S_un.S_un_b.s_b1;
    IPAddress[1] = addr.sin_addr.S_un.S_un_b.s_b2;
    IPAddress[2] = addr.sin_addr.S_un.S_un_b.s_b3;
    IPAddress[3] = addr.sin_addr.S_un.S_un_b.s_b4; str.Format(_T("%d.%d.%d.%d"), IPAddress[0], IPAddress[1], IPAddress[2], IPAddress[3]);
    AfxMessageBox(str);
    delete[] buf;
    buf = NULL;
      

  8.   

    CString str;
    CString IP[4];
    this->GetDlgItemText(IDC_ID_IPTEXT,str);
    for (int i=0;i<4;i++) {
    AfxExtractSubString(IP[i],(LPCTSTR)str,i,'.');
    }
    this->SetDlgItemText(IDC_ID_TEXT1,IP[0]);
    this->SetDlgItemText(IDC_ID_TEXT2,IP[1]);
    this->SetDlgItemText(IDC_ID_TEXT3,IP[2]);
    this->SetDlgItemText(IDC_ID_TEXT4,IP[3]);
      

  9.   

    _stscanf(str, "%d.%d.%d.%d", &IPAddress[0], &IPAddress[1] ,&IPAddress[2], &IPAddress[3]);
      

  10.   

    先inet_addr,然后你想怎么弄就随便了。
      

  11.   

    ++
    socket里面的东西。很好用。
      

  12.   


    这个很好用。。另外,sscanf也可以。。