C#中获取字节数据的高字节和低字节

字节顺序(Endianness)

1.小端序(Little-Endian):低字节在前(x86架构)

2.大端序(Big-Endian):高字节在前(网络字节序)

特性小端序(Little-Endian)大端序(Big-Endian)
存储顺序低字节在前高字节在前
常见架构x86/x64(Intel/AMD)网络协议(TCP/IP)
C# 检测BitConverter.IsLittleEndian == trueBitConverter.IsLittleEndian == false
转换方法BitConverter(默认)Array.Reverse() 或手动移位

如何判断当前系统的字节序?C# 提供了 BitConverter.IsLittleEndian 来检测当前系统的字节序:

if (BitConverter.IsLittleEndian)
{
    Console.WriteLine("当前系统是小端序(Little-Endian)");
}
else
{
    Console.WriteLine("当前系统是大端序(Big-Endian)");
}

在C#中,你可以使用位操作来获取16位或更大数值的高字节和低字节部分。以下是几种常见的方法:

对于16位整数(ushort/short)

方法一:

ushort value = 0xABCD; // 示例值
// 方法1:使用位操作
byte lowByte = (byte)(value & 0xFF);      // 低字节 0xCD
byte highByte = (byte)((value >> 8) & 0xFF); // 高字节 0xAB

方法二: 

小端序(Little-Endian)-低字节在前,高字节在后:

ushort value = 0xABCD;
// 方法2:使用BitConverter
byte[] bytes = BitConverter.GetBytes(value); // 默认按系统字节序(x86是小端序)
// 小端序存储:[低字节, 高字节] => [0xCD, 0xAB]
byte lowByte = bytes[0];  // 0xCD(低字节)
byte highByte = bytes[1]; // 0xAB(高字节)

大端序(Big-Endian)-高字节在前,低字节在后

ushort value = 0xABCD;
// 方法2:使用BitConverter
byte[] bytes = BitConverter.GetBytes(value); // 如果系统是大端序
// 大端序存储:[高字节, 低字节] => [0xAB, 0xCD]
byte lowByte = bytes[1];  // 0xCD(低字节)
byte highByte = bytes[0]; // 0xAB(高字节)

对于32位整数(uint/int)

uint value32 = 0x12345678;
// 获取4个字节
byte byte0 = (byte)(value32 & 0xFF);         // 最低字节 0x78
byte byte1 = (byte)((value32 >> 8) & 0xFF);  // 0x56
byte byte2 = (byte)((value32 >> 16) & 0xFF); // 0x34
byte byte3 = (byte)((value32 >> 24) & 0xFF); // 最高字节 0x12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值