typedef struct connect{
    char ip[16];
    int port;
}connect;
connect m_connect;
char buf[1024];
strcpy(buf,(char *)&m_connect);
我的问题是:怎样实现将一个结构体(共用体)中所有变量的值转换为字符串形式的变量。up有分!我写的是socket传输的数据包,发送完后还要将其还原,用它是很难实现还原的。
也许在数据包的格式可以设计为:
     命令字+出错代码+14位时间+校验码+数据+数字签名而其中数据又得另分为:
     第一数据长度+第一数据+第二数据长度+第二数据…………也许这是一种方法,但是它实在太麻烦了,对我来说不适用,因为我的数据包的格式有好多种,其数据区中的数据位数太不固定了,有string ,char *[],int BOOL,struct ,union,甚至还出现了struct中套union的数据……谁有更好的办法?高分相送!!

解决方案 »

  1.   

    不要使用strcpy,而应该使用memcpy:
    memcpy(buf,&m_connect, sizeof( connect ));WORD wCommand; //命令字
    DWORD dwErrorCode; //错误代码
    char buf[1024];
    char *p = buf; *(WORD*)p = wCommand;  p += sizeof( WORD );
     *(DWORD*)p = dwErrorCode;  p += sizeof( DWORD );
    ...
     memcpy( p,&m_connect, sizeof( connect ));
    ...send( buf, ... );...recv( buf, ... );p = buf; wCommand = *(WORD*)p;  p += sizeof( WORD );
     dwErrorCode = *(DWORD*)p;  p += sizeof( DWORD );
    ...
     memcpy( &m_connect, p,sizeof( connect ));
    ...
      

  2.   

    typedef struct _CONNECT{
    char str[16];
    int n;
    }* PCONNECT;DWORD* dwData = new DWORD[sizeof(_CONNECT)];
    memset(dwData, 0, sizeof(_CONNECT));PCONNECT pConnect = new _CONNECT;pConnect->n = 10;
    strcpy(pConnect->str, "111");//转换
    memcpy(dwData, pConnect, sizeof(_CONNECT));
    delete pConnect;
    //......//还原
    pConnect = new _CONNECT;
    memcpy(pConnect, dwData, sizeof(_CONNECT));delete pConnect;
    delete dwData;
    ================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]
      

  3.   

    大家在上面所说的方法中有一个共同点(我也有):就是传送时用的是结构体的首指针,但是不管strcpy或memcpy都是在碰上第一个成员变量ip结束后的'\0'时,不会继续strcpy,或memcpy。我原来也以为memcpy在遇到'\0'时会continue memcpy,谁知它不会……所以传出的值里面根本没有port的值。原因已经找出来了,我是这样认为的,但是还没有办法解决(因为要考虑到接收),请高手不吝赐教!!高分相送!!!
      

  4.   

    memcpy是按长度拷贝的,这没有问题,问题应该在别的地方。
    typedef struct{
    char ip[16];
    int port;
    } connect;
    connect m_connect;
    strcpy(m_connect.ip, "202.115.1.1");
    m_connect.port = 105;
    char buf[1024];
    memcpy(buf,(char *)&m_connect, sizeof(connect));
    connect c2;
    memcpy((char *)&c2, buf, sizeof(connect));
      

  5.   

    问题已解决:多谢sans,lhb_780902,everandforever,ccjh,wuxq