using System; using System.IO; using System.Linq; namespace JT809.Protocol.ProtocolPacket { public static class BinaryExtensions { public static void WriteLittle(this BinaryWriter writer, ulong value) { writer.Write((byte)(value >> 56)); writer.Write((byte)(value >> 48)); writer.Write((byte)(value >> 40)); writer.Write((byte)(value >> 32)); writer.Write((byte)(value >> 24)); writer.Write((byte)(value >> 16)); writer.Write((byte)(value >> 8)); writer.Write((byte)(value)); } public static void WriteLittle(this BinaryWriter writer, uint value) { writer.Write((byte)(value >> 24)); writer.Write((byte)(value >> 16)); writer.Write((byte)(value >> 8)); writer.Write((byte)(value)); } public static void WriteLittle(this BinaryWriter writer, int value) { writer.Write((byte)(value >> 24)); writer.Write((byte)(value >> 16)); writer.Write((byte)(value >> 8)); writer.Write((byte)(value)); } public static void WriteLittle(this BinaryWriter writer, short value) { writer.Write((byte)(value >> 8)); writer.Write((byte)(value)); } public static void WriteLittle(this BinaryWriter writer, ushort value) { writer.Write((byte)(value >> 8)); writer.Write((byte)(value)); } public static void WriteLittle(this BinaryWriter writer, byte value) { writer.Write(value); } public static void WriteLittle(this BinaryWriter writer, byte[] value) { writer.Write(value); } public static ulong ReadUInt64Little(this BinaryReader read) { var buffer = read.ReadBytes(8); return (ulong)(buffer[7] | buffer[6] << 8 | buffer[5] << 16 | buffer[4] << 24| buffer[3] << 32 | buffer[2] << 40 | buffer[1] << 48 | buffer[0] << 56); } public static uint ReadUInt32Little(this BinaryReader read) { var buffer = read.ReadBytes(4); return (uint)(buffer[3] | buffer[2] << 8 | buffer[1] << 16 | buffer[0] << 24); } public static ushort ReadUInt16Little(this BinaryReader read) { var buffer = read.ReadBytes(2); return (ushort)(buffer[1] | buffer[0] << 8); } /// /// 字节数组转16进制字符串 /// /// /// 默认 " " /// public static string ToHexString(this byte[] bytes,string separator=" ") { return string.Join(separator, bytes.Select(s => s.ToString("X2"))); } /// /// 16进制字符串转16进制数组 /// /// /// /// public static byte[] ToHexBytes(this string hexString, string separator = " ") { return hexString.Split(new string[] { separator }, StringSplitOptions.RemoveEmptyEntries).Select(s => Convert.ToByte(s, 16)).ToArray(); } } }