欢迎大家来到IT世界,在知识的湖畔探索吧!
01. 概述
大端模式(Big-endian):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端,即正序排列,高尾端;
小端模式(Little-endian):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端,即逆序排列,低尾端;
例(无论是小端模式还是大端模式。每个字节内部都是按顺序排列):
- 大端模式:
低地址 —————–> 高地址
0x0A | 0x0B | 0x0C | 0x0D
欢迎大家来到IT世界,在知识的湖畔探索吧!
- 小端模式:
低地址 ——————> 高地址
0x0D | 0x0C | 0x0B | 0x0A
02. 示例分析
16bit宽的数0x1234在两种模式CPU内存中的存放方式(假设从地址0x2000开始存放)为:
|
内存地址 |
小端模式存放内容 |
大端模式存放内容 |
|
0x2000 |
0x34 |
0x12 |
|
0x2001 |
0x12 |
0x34 |
32bit宽的数0x在两种模式CPU内存中的存放方式(假设从地址0x2000开始存放)为:
|
内存地址 |
小端模式存放内容 |
大端模式存放内容 |
|
0x2000 |
0x78 |
0x12 |
|
0x2001 |
0x56 |
0x34 |
|
0x2002 |
0x34 |
0x56 |
|
0x2003 |
0x12 |
0x78 |
03. 优缺点
大端小端没有谁优谁劣,各自优势便是对方劣势:
小端模式 :
强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
大端模式 :
符号位的判定固定为第一个字节,容易判断正负。
04. 数组存储
大端模式:
高位存储在高地址,低位存储在低地址。
小端模式:
低位存储在低地址,高位存储在高地址。
05. 测试机器模式
测试机器的大小端模式代码
#include <stdio.h>
#include <string.h>
int main(void)
{
short i = 0x1234;
char *p = (char *)&i;
if (0x12 == *p)
{
printf(“大端模式\n”);
}
else
{
printf(“小端模式\n”);
}
return 0;
}
一般操作系统都是小端,而通讯协议是大端的。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/111048.html