C#判断大小端

本文详细解释了计算机系统中数据存储的两种主要方式:大端和小端。大端模式下,高位数据存放在低地址,而小端模式则相反。文章还介绍了如何通过编程判断当前机器采用的是哪种模式,并提到了不同架构如x86和ARM,以及编译器如C语言和Java在大小端选择上的差异。

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

什么是大小端?

    大端:高位数据存放在低地址,低位数据存放在高地址。

    小端:高位数据存放在高地址,低位数据存放在低地址。

    举个例子,一个 short 类型的数,用十六进制表示出来是 0x1234,那么,0x12就是高位了,0x34就是低位了。然后我们看看数组的地址,一个 byte 数组 buf[2],其中,buf[0] 是地地址,buf[1]是高地址。那么,大端的数据是这样放的 :

buf[0]0x12低地址高位数据
buf[1]0x34高地址低位数据

    这样子比较符合日常的阅读,类似于读字符串那样子。那么小端的则搞好相反:

buf[0]0x34低地址低位数据
buf[1]0x12高地址高位数据

    这样子感觉上是将 12 34 倒着存起来。

为啥会有大下端之分呢

    这就像鸡蛋应该从小头打碎还是大头打碎一样,没有对错,只是方式不同。

    一般情况下,x86架构都是使用的小端模式,而且只支持小端。ARM默认小端模式,但是可以切换为大端。

    编译器也会有大小端之分,C语言默认是小端,java是大端。

    网络上传输的数据普遍是大端的。

怎么判断机器是大端还是小端呢

    在 windows下,使用C#,可以这样判断:

int i = 1;

//将int 转换到数组中,然后根据数组的地址进行判断
byte[] buf = BitConverter.GetBytes(i);

if(buf[0] == 1)
{    
    Console.WriteLine("小端");
}else{
    Console.WriteLine("大端");
}

    使用C语言其实更容易判断,通过指针和取址运算:

int i = 1;

//将 int 类型转换为 char*,然后拿到第一个字节的数据进行判断
char c = *(char *)&i;

if (c == 1)
{
	printf("小端");
}
else
{
	printf("大端");
}

    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值