我定义了结构体如下
typedef struct PACKET_BODY_tag    //liudan 2005.12.5
{
    unsigned short  operation;       //CMD_PKT_TYPE
    unsigned short  size;                //content's size
    unsigned char   content[ MAX_PKT_SIZE ];
}PACKET_T;  然后我声明了          PACKET_T a;
又做了指针指向a       char * str;
                     str=(char *)a;现在我从手机端收到的字符串存在一个CString receivedata中,这个里边就包含了包PACKET里的结构流,我想问的是如何实现指针拷贝? 因为我想把receivedata中的结构分析出来
a.operation
a.size我想把receivedata指针地址传给a,如何实现receivedata的指针和str相等?

解决方案 »

  1.   

    PACKET_T a;
    char* str;memcpy(&a, str, sizeof(a));
      

  2.   

    1。memcpy(&a, (LPCTSTR)str, sizeof(a));
      

  3.   

    receivedata.c_str()返回的不是指针值吗?
      

  4.   

    我想把receivedata指针地址传给a,如何实现receivedata的指针和str相等?
    -------------
    没有明白
      

  5.   

    一般的buffer用char* 或数组表示.CString::GetBuffer()
      

  6.   

    最好把 a定义为指针      PACKET_T *a;a=(PACKET_T *)receivedata.
      

  7.   

    一样的,要定义为指针的话首先要分配内存PACKET_T *a = new PACKET_T;a = (PACKET_T *)&receivedata;我觉得还是内存拷贝比较好
      

  8.   


    LPTSTR pstr = receivedata.GetBufferSetLength(sizeof(a)+1);
    memcpy(pstr, (LPCTSTR)&a, sizeof(a));
    receivedata.ReleaseBuffer();
      

  9.   

    CString receivedata;
        receivedata = "也许是你所说的Pack流";    char *pszText = new char[receivedata .GetLength() + 1];
        sprintf(pszText, "%s", str);    PACKET_T *a = (PACKET_T *)(&pszText);
        TRACE("operation: %d\n", a.operation);
        TRACE("size: %d\n", a.size);// 不过我也同意goodboyws(深夜不眠者)的意见。
      

  10.   

    最好是用buffer而不是用是CString这样的东东!
      

  11.   

    应该是
    str=(char *)&a 吧
      

  12.   

    接收到的数据不应放到CString receivedata,应分配一个缓冲区或数组来存放:
    char* buff = new char( sizeof(PACKET_T) );
    memcpy(buff, pSrc, sizeof(PACKET_T));
      

  13.   

    可以直接发或接收:recvfrom(s, (char*)&a, sizeof(a), 0, (sockaddr*)&Addr, &AddrSize);
      

  14.   

    谢谢大家给我提供了很多方法,现在选取了其中的一种mynamelj(风之羽翼)的解决办法,问题已经顺利解决了,非常感谢大家的热心解答,谢谢,现在结帖!