数据包解析中2byte中的数据如何转成short

defendmidfield 2004-07-23 09:46:01
一个数据包中有2byte的数据为后面数据的长度
如何把这个数据转成unsighed short?

谢谢指教...

我的思路

char ch[2];
memset ..
memcpy(ch,p,2);

然后使用atoi??
...全文
220 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
defendmidfield 2004-07-23
  • 打赏
  • 举报
回复
ok
结帐
3q
shootingstars 2004-07-23
  • 打赏
  • 举报
回复
网络主机字节的问题主要是由于int,short等在各种系统中存储的方式不一样造成的。
char数组不存在这个问题。
defendmidfield 2004-07-23
  • 打赏
  • 举报
回复
谢谢了

那么对于char数组类型的数据就不需要网络字节了??
是不是因为跨平台都是一样处理啊?

呵呵,如此简单的问题还需要确认一下。
shootingstars 2004-07-23
  • 打赏
  • 举报
回复
如果这个len是你在发送方构造的,并且发送和接收方都是同一种系统(比如windows),那么你不需要使用ntohs函数。
直接u_short len = *((u_short *)data);转换一下就可以了

如果你的系统需要跨平台,那么最好在传输之前对short,int之类的数据使用htons,htonl之类的函数转换成网络字节传输,在接收时使用ntohs,ntohl转换回来。
defendmidfield 2004-07-23
  • 打赏
  • 举报
回复
to shootingstars(有容乃大,无欲则刚)

如果采用network byte
收到的数据包,即上面说的data怎么转? ntohs?
defendmidfield 2004-07-23
  • 打赏
  • 举报
回复
to Zacking(风舞璇玑)
你说的方法可以实现

to zwzzwz()
你收包的应该是 *((u_short*)p)

to shootingstars(有容乃大,无欲则刚)
谢谢
shootingstars 2004-07-23
  • 打赏
  • 举报
回复
byte *data; // 这是你的数据的指针
u_short len = *((u_short *)data);


是否需要使用ntohs要看你的数据的传输格式(大小头的问题),如果是按照网络字节传输的,你需要使用ntohs再转化一下。
u_short len = ntohs(*((u_short *)data));
zwzzwz 2004-07-23
  • 打赏
  • 举报
回复

unsigned char *p;
发包:
unsigned short a;
memcpy(p,&a,sizeof(a));

收包时
unsigned short a;
a=(unsigned short)(*p);
就可以了
msdn_user 2004-07-23
  • 打赏
  • 举报
回复
u_short ntohs(
u_short netshort
);

u_short real_len = ntohs((u_short)len)
Zacking 2004-07-23
  • 打赏
  • 举报
回复
呵呵,应该是i <<= 8;
Zacking 2004-07-23
  • 打赏
  • 举报
回复
unsigned short i;
char byte1;
char byte2;

i = byte1;
i << 8;
i += byte2;

呵呵,不知道行不行
defendmidfield 2004-07-23
  • 打赏
  • 举报
回复
一个数据包格式如下
================
len | data
================

len是data的占用字节数,len占用2byte

我怎么解析出len?
lanstar200 2004-07-23
  • 打赏
  • 举报
回复
不懂,說得明白些

18,356

社区成员

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

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