MIPS 大端序和小端序的问题
来源:互联网 发布:火影忍者抄袭知乎 编辑:程序博客网 时间:2024/05/17 01:10
果然,继上次移植Libjpeg到openWRT上的问题之后,新的问题又出现了,之前写的用RTP传输jpg图像到VLC的程序,在虚拟机上运行时没问题的,可是在交叉编译到开发板上的时候就不行了,图像数据是传输出去了,但是VLC端就是接收不到图像。最后用抓包工具抓包看了看才发现,抓的包是一团乱啊,在UDP头后面的RTP头数据完全乱套了。抓包还抓到了TCP的三次握手(搞不懂为啥),还有个什么加密什么来着(以为是加密,后来才发现想多了)。
没办法,从程序开始找问题啊,最后发现可能就是字节序的问题。果然,把倒着写的RTP头定义正着写,传输抓包时才能收到正确的RTP的头的设置,图像也能在VLC显示出来。
后来又去网上逛了逛,才发现,大部分的MIPS和网络字节序一样,为大端模式,而我平时在ubuntu的虚拟机和arm开发板上都是小端模式,这就要一个字节序转换函数(htonl,htons,),但是在MIPS上的大端模式就不用了,所以把程序里的字节序转换函数也去掉就行了。
顺便复习下大端序和小端序吧:
字节序,又称端序,尾序,英文:Endianness。
在计算机科学领域中,字节序是指存放多字节数据的字节(byte)的顺序,典型的情况是整数在内存中的存放方式和网络传输的传输顺序。Endianness有时候也可以用指位序(bit)。
大小端序跟硬件的体系结构有关,所有x86系列的pc机都是小端序,跟操作系统无关。在x86系列的pc上的solaris系统是小端序,sun sparc平台的solaris是大端序。
大端字节序,高字节存于内存低地址,低字节存于内存高地址;小端字节序反之。
如一个long型数据0x12345678
大端字节序:
内存低地址--> 0x12
0x34
0x56
内存高地址--> 0x78
小端字节序:
内存低地址--> 0x78
0x56
0x34
内存高地址--> 0x12
- MIPS 大端序和小端序的问题
- 文件输入输出中遇到的大端序和小端序问题
- 大端序,小端序问题
- 大端序和小端序
- 大端序和小端序
- 大端序和小端序
- 大端序和小端序
- 大端序和小端序
- 大端序和小端序
- 大端序和小端序
- 大端序和小端序
- 内存的大端序和小端序
- 大端和小端的问题
- 大端序和小端序简介
- mips 的内存映射问题
- 大端和小端问题
- 大端和小端机器中字节序问题延伸: 在字节内部位序是怎么样的?
- 字节序----大端序和小端序
- 十六进制转八进制最高可输入十万位十六进制数
- Json原生解析
- [JAVA]定时任务之-Quartz使用篇
- 第13周项目4-Floyd算法的验证
- 如何去设计一个自适应的网页设计或HTMl5
- MIPS 大端序和小端序的问题
- deal.II链接PETSc过程记录
- RecyclerView+OkHttp加载刷新
- C/C++中用va_start/va_arg/va_end实现可变参数函数的原理与实例详解 .
- PAT 甲级:1108. Finding Average
- 优酷hadoop mapred 面试题[find friends]
- android 桌面小部件
- 非常详细的 Docker 学习笔记
- POJ 3268 - Shortest Path Dijstra+ SPFA