大家好:
关于指针的转换方面,我现在遇到了以下问题,希望各位帮忙想一下办法解决,谢谢了!
情况大致如下:在客户端,我用一个结构体,如:
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来进行传递,在服务器接收端方面,我仍然想用上面的结构体来存储数据,请问要怎么做?
简单的来说就是将一个结构体指针转换为字符指针,最后再转换为结构体指针。
如果可以,尽量贴出代码,谢谢!
关于指针的转换方面,我现在遇到了以下问题,希望各位帮忙想一下办法解决,谢谢了!
情况大致如下:在客户端,我用一个结构体,如:
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来进行传递,在服务器接收端方面,我仍然想用上面的结构体来存储数据,请问要怎么做?
简单的来说就是将一个结构体指针转换为字符指针,最后再转换为结构体指针。
如果可以,尽量贴出代码,谢谢!
解决方案 »
- CGdiObject::Attach是意义是什么
- [VC/MFC] 求如何转换uniform的spline data --> bezier的控制点 ?
- tcp/ip通信中listen函数的参数设置
- 在内存dc里绘制图标怎么用bitblt传出来?
- 请问,D:\Microsoft SDK\Lib\.;和D:\Microsoft SDK\Lib有什么区别?谢谢!
- 如何在vc程序里实现excel和sql server数据的互导?
- 请问怎么注册ocx
- 请各位相助,如何把HDC转化为gif图形文件?
- 怎么样判断一个字符串是否是合法的路径??急.......
- VC下使用vsFlexGrid的问题
- bitblt和兼容dc的问题
- vc+ado+oralce,unspecified error!
char senddata[1000];
memcpy(senddata,pball,sizeof(_Ball));
Ball balldata[500];
用WriteFile按2进制整块写盘,
读进来时会返回一个指针p,CopyMemory从p复制到balldata就可以了。
不过,错误的使用reinterpret_cast很容易导致程序的不安全,只有将转换后的类型值转换回到其原始类型,才是正确使用reinterpret_cast方式。
1.发送的时候,把结构体存储在一个字符数组里,char sendBuf[sizeof(Ball)],memcpy(sendBuf, (char*)content, sizeof(Ball))
2.接收的时候memcpy((char*)content, receiveBuf, sizeof(Ball))
要保证服务器和客户端两端的字节对齐啊。
使用方法如下:
// 以下表示一字节对齐
#pragma pack(push, 1)
struct {
char a;
int b;
};
#progma pack(pop)
根据你们提供的信息,我试过用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”