MIPS 大端序和小端序的问题
本文转载自链接: https://blog.csdn.net/Z_hehe/article/details/53310157 果然,继上次移植Libjpeg到openWRT上的问题之后,新的问题又出现了,之前写的用RTP传输jpg图像到VLC的程序,在虚拟机上运行时没问题的,可是在交叉编译到开发板上的时候就不行了,图像数据是传输出去了,但是VLC端就是接收不到图像。最后用抓包工具抓包看了看才发现,抓的包是一团乱啊,在UDP头后面的RTP头数据完全乱套了。抓包还抓到了TCP的三次握手(搞不懂为啥),还有个什么加密什么来着(以为是加密,后来才发现想多了)。 没办法,从程序开始找问题啊,最后发现可能就是字节序的问题。果然,把倒着写的RTP头定义正着写,传输抓包时才能收到正确的RTP的头的设置,图像也能在VLC显示出来。 后来又去网上逛了逛,才发现,大部分的MIPS和网络字节序一样,为大端模式,而我平时在ubuntu的虚拟机和arm开发板上都是小端模式,这就要一个字节序转换函数(htonl,htons,),但是在MIPS上的大端模式就不用了,所以把程序里的字节序转换函数也去掉就行了。 顺便复习下大端序和小端序吧: 字节序,又称端序,尾序,英文:Endianness。 在计算机科学领域中,字节序是指存放多字节数据的字节(byte)的顺序,典型的情况是整数在内存中的存放方式和网络传输的传输顺序