- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
mips 是 big-endian 的 mips 架 构 , mipsel 是 little-endian 的 mips 架构。
他们之间的区别就是内存中存放的数据的字节顺序相反,也就是把低位放在低地址还是高地址。
little endian 和big endian 是表示计算机字节顺序的两种格式,所谓的字节顺序指的是长度跨越多个字节的数据的存放形式.
假设从地址 0开始的一个字中保存有数据 0x1234abcd,那么在两种不同的内存顺序的机器上从字节的角度去看的话分别表示为:
little endian:在内存中的存放顺序是
00xcd,00xab,00x34,00x12
big endian:在内存中的存放顺序是
00x12,00x34,00xab,00xcd
需要特别说明的是,以上假设机器是每个内存单元以 8 位即一个字节为单位的.
简单的说,little endian 把低字节存放在内存的低位;而 big endian
将低字节存放在内存的高位.
现在主流的CPU,intel 系列的是采用的little endian 的格式存放数据,
而 motorola 系列的 CPU 采用的是 big endian.
以下是判断字节存储顺序的可移植的 C 语言代码:
/******************************************************************** created: 2006-9-5
filename: test.cpp author: 李创
purpose: 可移植的用于判断存储格式是
little endian 还是 big ednian 的 C 代码取自<<C: A Reference Manual>>
*********************************************************************
/
#include <stdio.h>
union
{
long Long;
char Char[sizeof(long)];
}u;
int main()
{
u.Long = 1;
if (u.Char[0] == 1)
{
printf("Little Endian!\n");
}
else if (u.Char[sizeof(long) - 1] == 1)
{
printf("Big Endian!\n");
}
else
{
printf("Unknown Addressing!\n");
}
printf("Now, Let's look at every byte in the memory!\n"); for (int i = 0; i < sizeof(long); ++i)
{
printf("[%x] = %x\n", &u.Char, u.Char);
}
return 0;
}
很多人认为掌握这个知识是不必要,其实不然.在网络编程中,TCP/IP 统一采用big endian 方式传送数据,也就是说,假设现在是在一个字节顺序是
little endian 的机器上传送数据,要求传送的数据是 0XCEFABOBO,那么你就要以0XBOBOFACE 的顺序在 unsigned int 中存放这个数据,只有这样才能保证存放的顺序满足 TCP/IP 的字节顺序要求.很多时候,需要自己编写应用层的协议,字节顺序的概念在这个时候就显得及其的重要了.
下面给出的是在 big endian 和 little endian 中相互转换的代码,C 语言强大的位操作的能力在这里显示了出来:
/********************************************************************
created: 2006-9-5
filename: get32put32.cpp
author: 李创
purpose: 在 little endian 和 big ednian 之间相互转化数据的演示代码
*********************************************************************
/
#include <stdio.h>
const unsigned char SIZE_OF_UNSIGNEDINT = sizeof(unsigned int); const unsigned char SIZE_OF_UNSIGNED
文档评论(0)