阅读:1497回复:1
求教: 网络字节顺序问题
这里问一个菜鸟问题:
我拦截rtp数据包,下面是报头定义: #pragma pack(push,1) typedef struct _RTPHEADER { unsigned int version:2; /* protocol version */ unsigned int p:1; /* padding flag */ unsigned int x:1; /* header extension flag */ unsigned int cc:4; /* CSRC count */ unsigned int m:1; /* marker bit */ unsigned int pt:7; /* payload type */ unsigned short seq; /* sequence number */ unsigned int ts; /* timestamp */ unsigned int ssrc; /* synchronization source */ unsigned int csrc[1]; /* optional CSRC list */ }RTP_HEADER, *PRTP_HEADER; #pragma pack(pop) 可是因为网络字节顺序问题,我用下面的方法得到错误结果, BOOL CProcRTP::IsRTP(unsigned char *pkt, int len) { /*if(len<sizeof(RTP_HEADER)) return FALSE; PRTP_HEADER pRtpHead = (PRTP_HEADER)pkt; TRACE("RTP Version:%dn", pRtpHead->version); TRACE("RTP PayloadType: %dn", pRtpHead->pt); TRACE("RTP Sequence:%dn", pRtpHead->seq); if((pRtpHead->version==2)&&(pRtpHead->pt==4)) return TRUE; } 不知道怎么样才能得到正确的结果? |
|
沙发#
发布于:2004-10-15 00:12
一般都是
RTPHEAD { unsigned char version:2; unsigned char padding:1; unsigned char extension:1; unsigned char cc:4; unsigned char marker:1; unsigned char payloadtype:7; unsigned short seq; /* sequence number */ unsigned int ts; /* timestamp */ unsigned int ssrc; /* synchronization source */ } RTPHEAD *hdr 然后 hdr->seq = htons(); hdr->ts = htonl(); .... unsighed char就不需要处理了。。直接赋值 接受时候转换回来 htons对应ntohs htonl对应ntohl |
|
|