大小端转换器
定义
命名空间:TouchSocket.Core
程序集:TouchSocket.Core.dll
一、基本概念
1. 大小端模式
-
大端模式 (Big Endian)
高位字节存储在内存低地址,低位字节存储在高地址。
*示例:整数10
的4字节大端表示为{0, 0, 0, 10}*
-
小端模式 (Little Endian)
低位字节存储在内存低地址,高位字节存储在高地址。
*示例:整数10
的4字节小端表示为{10, 0, 0, 0}
2. 端序类型枚举
public enum EndianType {
Big, // 标准大端
Little, // 标准小端
BigSwap, // 交换大端(特殊场景)
LittleSwap // 交换小端(特殊场景)
}
二、核心 API 使用
1. 直接指定端序转换器
// 预定义静态实例
TouchSocketBitConverter.BigEndian // 绝对大端
TouchSocketBitConverter.LittleEndian // 绝对小端
TouchSocketBitConverter.BigSwapEndian // 交换大端
TouchSocketBitConverter.LittleSwapEndian // 交换小端
2. 默认端序配置
// 默认小端模式(可全局修改)
TouchSocketBitConverter.DefaultEndianType = EndianType.Big;
// 获取当前默认转换器
TouchSocketBitConverter.Default.GetBytes(123);
三、基础数据类型转换
1. 数值类型转换
转换整型 (int
)
// int -> byte[]
byte[] data = TouchSocketBitConverter.BigEndian.GetBytes(0x12345678);
// byte[] -> int
int value = TouchSocketBitConverter.BigEndian.ToInt32(data, 0);
转换浮点型 (float
)
// float -> byte[]
float num = 3.14f;
byte[] bytes = TouchSocketBitConverter.LittleEndian.GetBytes(num);
// byte[] -> float
float result = TouchSocketBitConverter.LittleEndian.ToSingle(bytes, 0);
2. 长数据类型处理
转换长整型 (long
)
// long -> byte[]
long bigValue = 0x123456789ABCDEF0;
byte[] data = TouchSocketBitConverter.Default.GetBytes(bigValue);
// byte[] -> long
long restored = TouchSocketBitConverter.Default.ToInt64(data, 0);
转换高精度小数 (decimal
)
// decimal -> byte[]
decimal money = 123456.78m;
byte[] decimalBytes = TouchSocketBitConverter.BigEndian.GetBytes(money);
// byte[] -> decimal
decimal result = TouchSocketBitConverter.BigEndian.ToDecimal(decimalBytes, 0);
四、高级功能
1. 不安全内存操作
unsafe {
byte[] buffer = new byte[8];
long value = 0x1122334455667788;
// 直接内存写入
fixed (byte* ptr = buffer) {
TouchSocketBitConverter.LittleEndian.UnsafeWriteBytes(ref *ptr, value);
}
// 直接内存读取
long readValue = TouchSocketBitConverter.LittleEndian.UnsafeTo<long>(ref buffer[0]);
}
2. 布尔数组转换
// bool[] -> byte[]
bool[] flags = { true, false, true, true, false, true, false, true };
byte[] boolBytes = TouchSocketBitConverter.Default.GetBytes(flags);
// byte[] -> bool[]
bool[] decodedFlags = TouchSocketBitConverter.Default.ToBooleans(boolBytes, length: 1);
五、特殊场景处理
1. 字节序验证
// 检查当前配置是否与系统字节序一致
bool isCompatible = TouchSocketBitConverter.Default.IsSameOfSet();
2. 交换端序模式
// 使用 BigSwap 模式处理网络数据包
byte[] swappedData = TouchSocketBitConverter.BigSwapEndian.GetBytes(0xAABBCCDD);