예제 #1
0
            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");
                }
            }
예제 #2
0
 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");
 }