大家好:
    关于指针的转换方面,我现在遇到了以下问题,希望各位帮忙想一下办法解决,谢谢了!
    情况大致如下:在客户端,我用一个结构体,如:
    typedef struct _Ball                   
    {
DWORD BallNumber;
DWORD ClientNumber;
DWORD CanNumber;
char FindZero[24];
char Enable[24];
char Warning[256];
_Ball()
{
memset(this,0,sizeof(_Ball));
}
    }Ball;
    但通过网络传递时,需要转换为char* pszData来进行传递,在服务器接收端方面,我仍然想用上面的结构体来存储数据,请问要怎么做?
    简单的来说就是将一个结构体指针转换为字符指针,最后再转换为结构体指针。
    如果可以,尽量贴出代码,谢谢!

解决方案 »

  1.   

    用memcpy就可以了!拷贝的就是sizeof(_Ball)长度的char然后发送!
      

  2.   

    _Ball *pball;
    char senddata[1000];
    memcpy(senddata,pball,sizeof(_Ball));
      

  3.   

    网络传递我没做过,但常做内存映射、管道.
    Ball  balldata[500];
    用WriteFile按2进制整块写盘,
    读进来时会返回一个指针p,CopyMemory从p复制到balldata就可以了。
      

  4.   

    假如只是为了传递数据而做指针转换,可以考虑reinterpret_cast。
    不过,错误的使用reinterpret_cast很容易导致程序的不安全,只有将转换后的类型值转换回到其原始类型,才是正确使用reinterpret_cast方式。
      

  5.   

    需要网络传输的组织成XML,方便网络传输用二进制加长度这样的,也是可以的,不过不好扩展。 
      

  6.   

    你这个是定长的结构体,相对还是比较简单的,发送和接受的长度就是sizeof(Ball)
    1.发送的时候,把结构体存储在一个字符数组里,char sendBuf[sizeof(Ball)],memcpy(sendBuf, (char*)content, sizeof(Ball))
    2.接收的时候memcpy((char*)content, receiveBuf, sizeof(Ball))
      

  7.   

    还要注意一个很重要的问题,
    要保证服务器和客户端两端的字节对齐啊。
    使用方法如下:
    // 以下表示一字节对齐
    #pragma pack(push, 1)
        struct {
            char a;
            int b;
        };
    #progma pack(pop)
      

  8.   

    嗯,不好意思,现在才回复~~~
         根据你们提供的信息,我试过用memcpy直接进行转换是没办法实现的,传递的时候只传了一个"r",而七楼说的“reinterpret_cast”这个,说实话,我不懂怎么用,查MSDN也好像没有相关的例子,如果可以,麻烦再说一下,谢谢!
            我大概是这样写的,请各位帮忙查看一下问题~~~
             Ball TestBall;
    Ball *PBall = new Ball;
    PBall = &TestBall;
    TestBall.BallNumber = 1;
    TestBall.CanNumber = 1;
    TestBall.ClientNumber = 1;
    strcpy(TestBall.Enable,_T("是"));
    strcpy(TestBall.FindZero,_T("是"));
    strcpy(TestBall.Warning,_T("未报警"));
    int ilen=sizeof(Ball);
    char *pszData = new char[ilen+1];//(char*)PBall;
            memcpy(pszData,PBall,ilen);
            我进行单步调试,但发现pszData指针里面只存了“r”