计算机是小端模式,计算机内的大小端模式

一、什么是大端与小端模式?

大端模式英文叫Big-Edian,小端模式英文叫little-Endian.

简单说:

大端模式:低字节存放在内存的低地址,高字节存放在内存的高地址(跟我们的一般思维相一致);

小端模式:与上面的大端模式恰恰相反。

比如:0x12345678,这32bit的数字,在内存中分别按照大小端的存放形式为:

大端模式:低字节------>高字节

12 34 56 78

小端模式:高字节------>低字节

78 56 34 12

二、为什么要有大端和小端模式?

因为在计算机系统中都是以字节为单位进行存储的,一个字节为8bit,但是在C语言中除了有8bit的char型之外,还有其他数据类型。对于位数大于8位的处理器(比如16位或者32位处理器),在寄存器中必然会存在一个字节安排的问题。由此便有了大端小端模式的区分了。

三、怎么判别大端和小端模式?

方法一:#include

using namespace std;

bool IsBigEndian();

int main()

{

cout<< IsBigEndian()<

system("pause");

return 0;

}

bool IsBigEndian()

{

int a = 0x1234;

char b = *(char *)&a; //通过将int强制类型转换成char单字节,通过判断起始存储位置。即等于 取b等于a的低地址部分

if( b == 0x12)

{

return true;

}

return false;

}

方法二:利用联合体union的成员都是从低地址开始存放的性质:BOOL IsBigEndian()

{

union NUM

{

int a;

char b;

}num;

num.a = 0x1234;

if( num.b == 0x12 )

{

return TRUE;

}

return FALSE;

}

比方法一要更简单一些。

四、大端小端模式怎么进行转换?

一般通信系统都是小端,操作系统都是大端。

不同端模式的处理器进行端模式的转换时,必须考虑端模式的不同,比如进行网络数据的传输的时候。在SOCKET编程中,以下几个函数用于大小端数据的转换:#define ntohs(n) //16位数据类型网络字节顺序到主机字节顺序的转换

#define htons(n) //16位数据类型主机字节顺序到网络字节顺序的转换

#define ntohl(n) //32位数据类型网络字节顺序到主机字节顺序的转换

#define htonl(n) //32位数据类型主机字节顺序到网络字节顺序的转换

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值