本帖最后由 VisualEleven 于 2012-07-30 21:07:26 编辑

解决方案 »

  1.   

    #ifdef UNICODE
    MultiByteToWideChar(CP_ACP, ...);
    #else
    //直接格式化即可,sprintf()/StringCchPrintf()/strcpy_s();
    #endif或者使用CString类对象
    char buf[] = ...;
    CString strText(buf);
      

  2.   

    网络编程中,没有unicode这个概念,只有在有字符需要显示和需要调用带两个版本的API(比如AfxMessageBox就有A和W版本)时,才需要TCHAR之流。你在unicode下,同样可以使用char*的。char是c语言数据类型,与unicode并无关系。
    你在unicode下,同样可以使用std::string,同样可以编译lua源代码,boost源代码。并不是你的程序里面没有char(*)了,你的程序才专业,才通用,关键看你怎么用,winsock的API用了这么多年,它都是const char*参数的,没人说过它不通用,不管是否是unicode版本(目前绝大多数软件都是unicode版本)。
      

  3.   

    inet_ntoa
    The Windows Sockets inet_ntoa function converts an (Ipv4) Internet network address into a string in Internet standard dotted format.char FAR * inet_ntoa (
      struct in_addr in  
    );
     
    Parameters
    in 
    [in] A structure that represents an Internet host address. 
    Res
    The inet_ntoa function takes an Internet address structure specified by the in parameter and returns an ASCII string representing the address in ".'' (dot) notation as in "a.b.c.d''. The string returned by inet_ntoa resides in memory that is allocated by Windows Sockets. The application should not make any assumptions about the way in which the memory is allocated. The data is guaranteed to be valid until the next Windows Sockets function call within the same thread, but no longer. Therefore, the data should be copied before another Windows Sockets call is made.Return Values
    If no error occurs, inet_ntoa returns a char pointer to a static buffer containing the text address in standard ".'' notation. Otherwise, it returns NULL.