在做视频文件解析开发时,经常需要进行网络字节到本地字节的转换。在视频文件中,相关数据是以网络字节存储的,比如视频的宽,定义为uint_32类型,读取时我们需要转换为本地字节序才可以得到正确结果。
操作系统自带api可以帮助我们进行字节序的转换,如下所示函数与具体平台无关:
1 2 3 4 |
u_short htons(u_short hostshort); // 将u_short 类型变量从主机字节顺序转化到TCP/IP网络字节顺序 u_long htonl(u_long hostlong); // 将u_long 类型变量从主机字节顺序转化到TCP/IP网络字节顺序 u_short ntohs(u_short netshort); // 将u_short 类型变量从TCP/IP网络字节顺序转化到主机字节顺序 u_long ntohl(u_long netlong); // 将u_long 类型变量从TCP/IP网络字节顺序转化到主机字节顺序 |
我们也可以用c++函数模板实现一个,方便使用,我一般都是用自己的函数模板的:
1 2 3 4 5 6 7 8 9 10 11 |
// 网络字节到小端 template <class T> T ntole(T num) { T ret = 0; unsigned char * p = (unsigned char*)# for(int i = 0; i < sizeof(T); i++) ret |= (p[i] << ((sizeof(T) - i - 1) * 8)); return ret; } |
文章评论