【¥1000 $$$ 】 关于指针强制类型转换的有关问题,怎样用一个WORD *的指针操作一个char*的地址? $$$ ¥100
【¥1000 $$$ 】 关于指针强制类型转换的问题,怎样用一个WORD *的指针操作一个char*的地址?? $$$ ¥100
怎样用一个 WORD * 的指针操作一个 char* 的地址呀??
这种问题在数据传送的时候会遇到吧, 缓冲区都是 char * 类型的,我现在要发送的数据是以 WORD 为单位的。现在接收完之后,想直接用 WORD* 的指针读缓冲区里数据,可是
WORD* pWORDDest = reinterpret_cast<WORD*>( pcharScr);
这样 pWORDDest 所指向的内存实际上还是char*的,static_cast这里又类型转换无效。
解引用这个pWORDDest读数据,还是单个单个的字节。这个怎么办?
网络传输的时候经常会有这种问题吧,都是怎么处理的呢?
新建一块WORD类型的内存区域,Copy过去吗?这样岂不是有点浪费?
------解决方案--------------------
一个内存区域你认为是char*类型的那就是char*类型的,你认为是Word*类型的就是Word*类型的了,数据有不会变。只是内存区域切块的大小不一样而已。
------解决方案--------------------
楼主是不是想要这样的?
char * buf=(char*)malloc(10);
WORD wDate=1234;
int iDate=56789;
memcpy(buf,&wDate,sizeof(WORD));//把数据装入buf
memcpy(buf+sizeof(WORD),&iDate,sizeof(int));//注意地址的偏移
.
.这个buf通过网络传输或者其他什么方式处理后
.
WORD wMyDate;
int iMyDate;
memcpy(&wMyDate,buf,sizeof(WORD)); //数据从buf取出
memcpy(&iMyDate,buf+sizeof(WORD),sizeof(int));//还是要注意数据的地址
cout<<"wMyDate:"<<wMyDate<<endl;
cout<<"iMyDate:"<<iMyDate<<endl;
------解决方案--------------------
在接收了buf后如果不想再分配内存也可以直接用,不过得小心处理,防止内存泄漏
WORD *wMyDate;
int *iMyDate;
// memcpy(&wMyDate,buf,sizeof(WORD));
// memcpy(&iMyDate,buf+sizeof(WORD),sizeof(int));
wMyDate=(WORD*)buf;
iMyDate=(int *)(buf+sizeof(WORD));
cout<<"wMyDate:"<<*wMyDate<<endl;
cout<<"iMyDate:"<<*iMyDate<<endl;
------解决方案--------------------
------解决方案--------------------
WORD* pWORDDest = reinterpret_cast<WORD*>( pcharScr);
解引用这个pWORDDest读数据
比如说:
WORD WORDDest0 = pWORDDest[0];
WORDDest0 的内容真是单字节吗?
------解决方案--------------------
用memcpy
------解决方案--------------------
我觉得首先概念上有错误,指针只是指向了一个内存地址,里面的内容是不能改变的。这里你用WORD * pWORDDest=reinterpret_cast<WORD *> (pCharScr)不能让数据格式变化的。
------解决方案--------------------
DWORD dwXYZ=*(DWORD*) pcharScr;
注意 pcharScr必须是小尾的 4个 binary 字节
怎样用一个 WORD * 的指针操作一个 char* 的地址呀??
这种问题在数据传送的时候会遇到吧, 缓冲区都是 char * 类型的,我现在要发送的数据是以 WORD 为单位的。现在接收完之后,想直接用 WORD* 的指针读缓冲区里数据,可是
WORD* pWORDDest = reinterpret_cast<WORD*>( pcharScr);
这样 pWORDDest 所指向的内存实际上还是char*的,static_cast这里又类型转换无效。
解引用这个pWORDDest读数据,还是单个单个的字节。这个怎么办?
网络传输的时候经常会有这种问题吧,都是怎么处理的呢?
新建一块WORD类型的内存区域,Copy过去吗?这样岂不是有点浪费?
------解决方案--------------------
一个内存区域你认为是char*类型的那就是char*类型的,你认为是Word*类型的就是Word*类型的了,数据有不会变。只是内存区域切块的大小不一样而已。
------解决方案--------------------
楼主是不是想要这样的?
char * buf=(char*)malloc(10);
WORD wDate=1234;
int iDate=56789;
memcpy(buf,&wDate,sizeof(WORD));//把数据装入buf
memcpy(buf+sizeof(WORD),&iDate,sizeof(int));//注意地址的偏移
.
.这个buf通过网络传输或者其他什么方式处理后
.
WORD wMyDate;
int iMyDate;
memcpy(&wMyDate,buf,sizeof(WORD)); //数据从buf取出
memcpy(&iMyDate,buf+sizeof(WORD),sizeof(int));//还是要注意数据的地址
cout<<"wMyDate:"<<wMyDate<<endl;
cout<<"iMyDate:"<<iMyDate<<endl;
------解决方案--------------------
在接收了buf后如果不想再分配内存也可以直接用,不过得小心处理,防止内存泄漏
WORD *wMyDate;
int *iMyDate;
// memcpy(&wMyDate,buf,sizeof(WORD));
// memcpy(&iMyDate,buf+sizeof(WORD),sizeof(int));
wMyDate=(WORD*)buf;
iMyDate=(int *)(buf+sizeof(WORD));
cout<<"wMyDate:"<<*wMyDate<<endl;
cout<<"iMyDate:"<<*iMyDate<<endl;
------解决方案--------------------
------解决方案--------------------
WORD* pWORDDest = reinterpret_cast<WORD*>( pcharScr);
解引用这个pWORDDest读数据
比如说:
WORD WORDDest0 = pWORDDest[0];
WORDDest0 的内容真是单字节吗?
------解决方案--------------------
用memcpy
------解决方案--------------------
我觉得首先概念上有错误,指针只是指向了一个内存地址,里面的内容是不能改变的。这里你用WORD * pWORDDest=reinterpret_cast<WORD *> (pCharScr)不能让数据格式变化的。
------解决方案--------------------
DWORD dwXYZ=*(DWORD*) pcharScr;
注意 pcharScr必须是小尾的 4个 binary 字节