public static object GetPrimitiveValue(PrimitiveType basicType, byte[] data, ref int startIndex) { var length = PrimitiveTypeHelper.GetLength(basicType); object value = null; switch (length) { case 1: value = data[startIndex]; break; case 2: value = BitConverter.ToInt16(data, startIndex).FromBigEndian(); break; case 4: value = BitConverter.ToInt32(data, startIndex).FromBigEndian(); break; case 8: value = BitConverter.ToInt64(data, startIndex).FromBigEndian(); break; default: throw new Exception("StaticField类型错误"); } startIndex += length; return(value); }
public static DumpPrimitiveArray Deserialize(this DumpPrimitiveArray input, byte[] data, ref int startIndex) { input.PrimitiveArrayID = (int)BitConverter.ToInt32(data, startIndex).FromBigEndian(); startIndex += 4; input.StackTraceSerialNumber = (int)BitConverter.ToInt32(data, startIndex).FromBigEndian(); startIndex += 4; input.Length = BitConverter.ToInt32(data, startIndex).FromBigEndian(); startIndex += 4; input.Type = (PrimitiveType)data[startIndex]; startIndex += 1; var size = PrimitiveTypeHelper.GetLength(input.Type) * input.Length; input.ElementDatas = data.Skip(startIndex).Take(size).ToArray(); startIndex += size; return(input); }