public void WriteUnsigned64(ulong value, byte tag = 255)
{
int length;
if (value < (1ul << 8))
length = 1;
else if (value < (1ul << 16))
length = 2;
else if (value < (1ul << 24))
length = 3;
else if (value < (1ul << 32))
length = 4;
else if (value < (1ul << 40))
length = 5;
else if (value < (1ul << 48))
length = 6;
else if (value < (1ul << 56))
length = 7;
else
length = 8;
_writeLengthHeader(tag, ApplicationTag.Unsigned, length);
value = new Union8(value << (64 - (length * 8))).Reverse().UInt64;
for(int i = 0; i < length; i++)
{
_writer.Write((byte)value);
value >>= 8;
}
}