public uint DecodeLength () {
Assert.False(Remain < 4, UnexpectedEnd.Throw);
var Byte0 = Data[Pointer++];
var Byte1 = Data[Pointer++];
var Byte2 = Data[Pointer++];
var Byte3 = Data[Pointer++];
// Length encoding is bigendian
uint Result = (uint) ((Byte0 << 24) | Byte1 << 16 | Byte2 << 8 | Byte3);
return Result;
}