首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有没有更好的办法?解决方法

2012-02-28 
有没有更好的办法???UINT8pPacket[20]//8位UINT16len//16位如果要把len的值变成由pPacket[0]高位,pPacke

有没有更好的办法???
UINT8   pPacket[20];//8位
UINT16   len;//16位

如果要把len的值变成由pPacket[0]高位,pPacket[1]低位组成的值;

我这样做:
len=pPacket[0];
len=len < <8+pPacket[01];

正确吗???


我觉得这个不算太好,有没有更直接的办法???比如类型转换直接赋值


[解决办法]
len = *(UINT16*)pPacket;
[解决办法]
我这样做:
len=pPacket[0];
len=len < <8+pPacket[01];

正确吗???
=====================
你这么做是错误的。
首先要注意字节序的问题,在x86下为小端,低位在1前,
所以应该len=(pPacket[01] < <8)+pPacket[0]
其次: < <号的优先级比+号低,要注意加括号。

最好的方法应该如楼上所说:len = *(UINT16*)pPacket;
[解决办法]
这样并不好,因为不同系统对高低位处理是不同的。就是所谓的Little endian 和Big endian
比如: 0x1234 在有的系统中存储为0x12 0x34,而有的系统中会存储为0x34,0x12。所以最好还是手动转换,不要使用强制转换。
[解决办法]
错了,应该是
memcpy(&len, &pPacket,2);

热点排行