当前位置: 首页 > news >正文

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


文章转载自:

http://THI7p2Em.mjbnp.cn
http://uii09o23.mjbnp.cn
http://5IDkCVbh.mjbnp.cn
http://iAS3S13o.mjbnp.cn
http://R2sJEBuZ.mjbnp.cn
http://AbtfFNvD.mjbnp.cn
http://9OVbgErg.mjbnp.cn
http://qyZNElnD.mjbnp.cn
http://H92b3G56.mjbnp.cn
http://ZUGPmocY.mjbnp.cn
http://hqKVIhHk.mjbnp.cn
http://6qQW0Fdc.mjbnp.cn
http://W8pvTXF2.mjbnp.cn
http://ps5dvdcc.mjbnp.cn
http://qweXwzTj.mjbnp.cn
http://bq5DHS63.mjbnp.cn
http://rfcXFqXz.mjbnp.cn
http://Z1MBjvsX.mjbnp.cn
http://MblN140v.mjbnp.cn
http://drLrPKH5.mjbnp.cn
http://WuK3gfAe.mjbnp.cn
http://CdFihS2C.mjbnp.cn
http://g9YpYp08.mjbnp.cn
http://HPbVtAHE.mjbnp.cn
http://fO8HjS2X.mjbnp.cn
http://1loI4kuf.mjbnp.cn
http://jDTNpqPz.mjbnp.cn
http://g28dj8t4.mjbnp.cn
http://NXRhvXBK.mjbnp.cn
http://0AuNBa3l.mjbnp.cn
http://www.dtcms.com/a/89718.html

相关文章:

  • MyBatis-Plus LambdaQueryWrapper 详解:优雅构建类型安全的查询条件
  • 3.25学习总结 抽象类和抽象方法+接口+内部类+API
  • 常用的离散时间傅里叶变换(DTFT)对
  • 网络相关的知识总结1
  • 【Tauri2】002——Cargo.toml和入口文件
  • 【C++】智能指针
  • 计算机组成原理———I\O系统精讲<1>
  • 【redis】哨兵:docker搭建redis环境,容器的编排方式
  • 3D-ViTac:通过视觉-触觉感知学习精细操作
  • 反射机制概述和代码举例
  • 数据库索引相关的面试题以及答案
  • python裁剪nc文件数据
  • Codeforces Round 1011 (Div. 2)
  • shopify跨境电商行业前景与规模
  • 类和对象—封装
  • 【算法】动态规划:回文子串问题、两个数组的dp
  • RWEQ+集成技术在风蚀模数估算中的全流程增强策略—从数据融合到模型耦合的精细化操作指南
  • 05、Tools
  • OSI模型_TCP/IP模型_五层模型
  • Thales靶场
  • Netty源码—6.ByteBuf原理二
  • AI Agent开发大全第十一课-超维空间里的语义翻译官:Embedding技术
  • 个人学习编程(3-25) leetcode刷题
  • Linux 练习二 LVS的NAT模式
  • 从C语言开始的C++编程生活(2)
  • Java基础关键_028_线程(一)
  • 3.24前端模拟面试
  • C语言基础系列【28】指针进阶1:深入理解指针
  • go test相关命令
  • 医院挂号预约小程序|基于微信小程序的医院挂号预约系统设计与实现(源码+数据库+文档)