vs2008下 数组通过强制转换后不能赋值给结构体

vincent_2546 2011-03-04 05:50:50
char szRecvBuf[MAX_BUF_SIZE] = {0};
int iRet = recv(MySock,szRecvBuf,MAX_BUF_SIZE,0);
if (iRet > 0)
{
LPIPHEADER pIPHeader = (LPIPHEADER)szRecvBuf;
pPackInfo->nProtocol = (USHORT)pIPHeader->bProtocol;
pPackInfo->nSourIp = pIPHeader->nSourIp;
pPackInfo->nDestIp = pIPHeader->nDestIp;
pPackInfo->nLength = iRet;
UINT nIPHeadLength = (pIPHeader->bVerAndHLen & 0x0F)* sizeof(UINT);

switch (pPackInfo->nProtocol)
{
case IPPROTO_TCP:
{
//LPTCPHEADER pTcpHeader = (LPTCPHEADER)new char[nIPHeadLength];
LPTCPHEADER pTcpHeader = (LPTCPHEADER)&szRecvBuf[nIPHeadLength];


pPackInfo->nSourPort = pTcpHeader->nSourPort;
pPackInfo->nDestPort = pTcpHeader->nDestPort;
pDlg->AddPack(pPackInfo);
}break;

case IPPROTO_UDP:
{
LPUDPHEADER pUDPHeader = (LPUDPHEADER)&szRecvBuf[nIPHeadLength];
pPackInfo->nSourPort = pUDPHeader->nSourPort;
pPackInfo->nDestPort = pUDPHeader->nDestPort;
pDlg->AddPack(pPackInfo);
}
break;




LPIPHEADER为自定义的结构体,编译到 LPTCPHEADER pTcpHeader = (LPTCPHEADER)&szRecvBuf[nIPHeadLength]; 这里时提示
错误 error C2440: “类型转换”: 无法从“char *”转换为“LPTCPHEADER”
请问如何能将数组szRecvBuf正确赋值给pTCpHeader结构体

...全文
178 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2011-03-07
  • 打赏
  • 举报
回复
不能直接转换,需要进行内存数据拷贝,可以用memcpy
Conry 2011-03-07
  • 打赏
  • 举报
回复
memcpy(pPackInfo,szRecvBuf+nIPHeadLength,sizeof(PackInfo));

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧