字节序列

大端与小端字节序详解

内存低地址存数据高位 内存高地址存数据低位—大端字节序 (符合观看习惯)

内存低地址存数据地位  内存高地址存数据高位--小端字节序(符合思维习惯)

 

0x12345678

小端字节序(内存由低到高存储为):78563412

大端字节序:  0x12 34 56 78 

转载于:https://www.cnblogs.com/tangyuxian/p/3824280.html

### C#中处理字节序列的实现方式 在C#中,处理字节序列是一个常见的任务,尤其是在涉及网络通信、文件读写或数据交换时。以下是几种常见的字节序列处理方法及其实现示例。 #### 1. 使用 `BitConverter` 类 `BitConverter` 提供了将基本数据类型转换为字节数组以及从字节数组转换回基本数据类型的功能[^2]。 ```csharp using System; class Program { static void Main() { int number = 42; byte[] bytes = BitConverter.GetBytes(number); // 将整数转换为字节数组 Console.WriteLine(BitConverter.ToString(bytes)); // 输出字节数组 int originalNumber = BitConverter.ToInt32(bytes, 0); // 从字节数组恢复整数 Console.WriteLine(originalNumber); // 输出原始整数 } } ``` #### 2. 检测系统字节序 在处理字节序列时,了解系统的字节序(大端序或小端序)非常重要。C# 提供了 `BitConverter.IsLittleEndian` 来检测当前系统的字节序[^2]。 ```csharp using System; class Program { static void Main() { if (BitConverter.IsLittleEndian) { Console.WriteLine("当前系统是小端序(Little-Endian)"); } else { Console.WriteLine("当前系统是大端序(Big-Endian)"); } } } ``` #### 3. 使用 `BinaryReader` 和 `BinaryWriter` 当需要从文件或其他流中读取或写入字节序列时,可以使用 `BinaryReader` 和 `BinaryWriter`[^1]。 ```csharp using System; using System.IO; class Program { static void Main() { string filePath = "data.bin"; // 写入字节序列 using (FileStream fs = new FileStream(filePath, FileMode.Create)) using (BinaryWriter writer = new BinaryWriter(fs)) { writer.Write(123); // 写入整数 writer.Write("Hello"); // 写入字符串 } // 读取字节序列 using (FileStream fs = new FileStream(filePath, FileMode.Open)) using (BinaryReader reader = new BinaryReader(fs)) { int number = reader.ReadInt32(); // 读取整数 string text = reader.ReadString(); // 读取字符串 Console.WriteLine($"Number: {number}, Text: {text}"); } } } ``` #### 4. 使用 `MessagePack` 进行高效序列化 对于更复杂的场景,例如需要高效的二进制序列化和反序列化,可以使用第三方库如 `MessagePack`[^3]。 ```csharp using System; using MessagePack; [Serializable] public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main() { Person person = new Person { Name = "Alice", Age = 30 }; // 序列化 byte[] serializedData = MessagePackSerializer.Serialize(person); // 反序列化 Person deserializedPerson = MessagePackSerializer.Deserialize<Person>(serializedData); Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}"); } } ``` ### 总结 以上代码展示了如何在C#中处理字节序列的不同方法,包括使用 `BitConverter`、`BinaryReader`/`BinaryWriter` 以及第三方库 `MessagePack`。每种方法都有其适用场景,选择合适的方法可以提高程序的效率和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值