c语言单位换算转换程序,c语言大小端转化

本文介绍了big-endian和little-endian两种字节序的概念及其来源,并通过实例详细对比了它们在内存中的存储方式。同时,文章还讨论了不同字节序在计算机体系结构中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

big-endian和little-endian这两个术语来自JonathanSwift在十八世纪的嘲讽作品Gulliver’sTravels。Blefuscu帝国的国民被根据吃鸡蛋的方式划分为两个部分:一部分在吃鸡蛋的时候从鸡蛋的大端(bigend)开始,而另一部分则从鸡蛋的小端(little end)开始。

x86的CPU使用的是LE(Windows中称为“主机字节序”),而SocksAddr中使用的则是BE(就是“网络字节序”),所以在使用网络编程时需要使用htns,htnl,nths,nthl来倒字节序。

其实对汇编熟了就清楚了,惨,我的汇编很惨的

LE little-endian

最符合人的思维的字节序

地址低位存储值的低位

地址高位存储值的高位怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说

低位值小,就应该放在内存地址小的地方,也即内存地址低位

反之,高位值就应该放在内存地址大的地方,也即内存地址高位

BE big-endian

最直观的字节序

地址低位存储值的高位

地址高位存储值的低位

为什么说直观,不要考虑对应关系

只需要把内存地址从左到右按照由低到高的顺序写出

把值按照通常的高位到低位的顺序写出

两者对照,一个字节一个字节的填充进去

例子:在内存中双字0x01020304(DWORD)的存储方式

内存地址

4000 4001 4002 4003

LE 04 03 02 01

BE 01 02 03 04

MSDN中关于LE和BE的解释

Byte Ordering Byte ordering Meaning

big-endian The most significant byte is on the left end ofaword.

little-endian The most significant byte is on the right end ofaword.

这里这个最重要的字节可以解释成值的最高位,如果换成是钱的话就是最值钱的那一位

比如我有1234元人民币,最值钱的是1000元,最不值钱的是4元,那么这个1就是最重要的字节

Big endian machine: It thinksthefirst byte it reads is the biggest. Little endian machine: It thinks the first byte it reads isthelittlest. 举个例子,从内存地址0x0000开始有以下数据 0x0000   0x12 0x0001   0x34 0x0002   0xab 0x0003   0xcd 如果我们去读取一个地址为0x0000的四个字节变量,若字节序为big-endian,则读出 结果为0x1234abcd;若字节序位little-endian,则读出结果为0xcdab3412. 如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为          big-endian  little-endian 0x0000   0x12         0xcd 0x0001   0x23         0xab 0x0002   0xab         0x34 0x0003   0xcd         0x12 x86系列CPU都是little-endian的字节序.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值