寻址和字节顺序 ---所谓的大小端

寻址和字节顺序 —所谓的大小端

  某些机器在存储器中按照从最低有效字节到最高有效字节的顺序存储对象,这种方式称之为小端法;而有些机器按照从最高有效字节到最低有效字节进行存储,这种方式称之为大端法
  实例,一个int型的数据0x12345678,占四个字节,假设地址为0x2000 ~ 0x2003。

地址0x20000x20010x20020x2003
小端法0x780x560x340x12
大端法0x120x340x560x78

C程序大小端判定

  大小端的判断方法很多,不过我觉得联合体union可以简单明了的解释这个问题,定义的union多个成员共用一块内存,每一个成员在任一时刻有且只有一个成员使用此块内存。下例中的word和byte就占用同一内存,因此对成员word赋值,成员byte里面就存放了相应的值。
  对word赋值0x12345678,假设地址为0x2000 ~ 0x2003;大小端存放方式见下表。

成员的地址0x20000x20010x20020x2003
小端法/byte[0~3]0x780x560x340x12
大端法/byte[0~3]0x120x340x560x78
#include "stdio.h"

#define uint8 unsigned char
#define uint16 unsigned short
#define uint32 unsigned int

typedef union 
{
	uint32 word;
	uint8 byte[4];
}Data;

int main(void)
{
	int i = 0;
	Data num;

	num.word = 0x12345678;

	printf("0x12345678的存放方式:\n");
	printf("addr:");
	for(i = 0; i < sizeof(Data); i++)
	{
		printf("%p ", &num.byte[i]);
	}

	if(num.byte[0] == 0x12)
		printf("\n大端法:");
	if(num.byte[0] == 0x78)
		printf("\n小端法:");

	for(i = 0; i < sizeof(Data); i++)
	{
		printf("0x%-12x ", num.byte[i]);
	}

	printf("\n");

	return 0;
}

C程序执行结果

  得出此机器是以小端模式存放数据的

lirong@PC-LR:~/code/test$ ./main
0x12345678的存放方式:
addr:0x7fff4f8292c0 0x7fff4f8292c1 0x7fff4f8292c2 0x7fff4f8292c3 
小端法:0x78           0x56           0x34           0x12   

2018-11-14-LR

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值