public static long Unpack(byte[] content) { if (content.Length == 1 && content[0] <= 0xFF) { return((sbyte)content[0]); } var toInterpret = content.Skip(1).ToArray(); switch (content[0]) { case Markers.Int8: return((sbyte)toInterpret[0]); case Markers.Int16: return(PackStreamBitConverter.ToInt16(toInterpret)); case Markers.Int32: return(PackStreamBitConverter.ToInt32(toInterpret)); case Markers.Int64: return(PackStreamBitConverter.ToInt64(toInterpret)); default: throw new ArgumentOutOfRangeException(nameof(content), content[0], "Unknown Marker"); } }
public static int GetExpectedSize(byte[] content) { if (content[0] >= 0x80 && content[0] <= 0x8F) { return(content[0] - 0x80); } if (content[0] == 0xD0) { return(content[1]); } if (content[0] == 0xD1) { var markerSize = content.Skip(1).Take(2).ToArray(); return((ushort)PackStreamBitConverter.ToInt16(markerSize)); } if (content[0] == 0xD2) { var markerSize = content.Skip(1).Take(4).ToArray(); return(PackStreamBitConverter.ToInt32(markerSize)); } throw new ArgumentOutOfRangeException(nameof(content), content[0], "Unknown Marker"); }