关于Big-Endian 和 Little-Endian 的区别

Kurama2005 2005-06-18 11:18:31
我现在做的这个项目中,MMI层和下层用的字编码都是UCS2,看资料中提到两个层次用的分别是Big-Endian 和 Little-Endian ,请教大侠关于Big-Endian 和 Little-Endian 的区别,我上网查了,但还是不明白……
...全文
135 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sea2000cn 2005-06-18
  • 打赏
  • 举报
回复
Big-Endian 和 Little-Endian 字节排序

字节排序 含义
Big-Endian 一个Word中的高位的Byte放在内存中这个Word区域的低地址处。
Little-Endian 一个Word中的低位的Byte放在内存中这个Word区域的低地址处。


必须注意的是:表中一个Word的长度是16位,一个Byte的长度是8位。如果一个数超过一个Word的长度,必须先按Word分成若干部分,然后每一部分(即每个Word内部)按Big-Endian或者Little-Endian的不同操作来处理字节。

一个例子:
如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
big-endian little-endian
0x0000 0x12 0xcd
0x0001 0x34 0xab
0x0002 0xab 0x34
0x0003 0xcd 0x12
liubingqian 2005-06-18
  • 打赏
  • 举报
回复
《深入理解计算机系统》里有详细讲解。
简单的说,小端法机器是先存放数据的低有效位,再存放高有效位;大端法机器正好相反。
sunman1982 2005-06-18
  • 打赏
  • 举报
回复
你说得大端机和小端机吧,
小端机是说按照最低有效字节到最高有效字节的顺序列出字节,大端机相反
shockwave_115 2005-06-18
  • 打赏
  • 举报
回复
计算机存储时一个是从高位开始存储一个是从低位开始
zhousqy 2005-06-18
  • 打赏
  • 举报
回复
#include <stdio.h>

int
main(int argc, char **argv)
{
union {
short s;
char c[sizeof(short)];
} un;

un.s = 0x0102;

if (sizeof(short) == 2) {
if (un.c[0] == 1 && un.c[1] == 2)
printf("big-endian\n");
else if (un.c[0] == 2 && un.c[1] == 1)
printf("little-endian\n");
else
printf("unknown\n");
} else
printf("sizeof(short) = %d\n", sizeof(short));

exit(0);
}
shockwave_115 2005-06-18
  • 打赏
  • 举报
回复
怎么写一个函数判断机器是big_endian还是little_endian?

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧