private void WriteBignumValue(BigInteger/*!*/ value) { char sign; if (value.Sign > 0) { sign = '+'; } else if (value.Sign < 0) { sign = '-'; } else { sign = '0'; } _writer.Write((byte)sign); uint[] bits = value.GetWords(); int n = bits.Length * 2, mn = bits.Length - 1; bool truncate = false; if (bits.Length > 0 && (bits[mn] >> 16) == 0) { n--; truncate = true; } WriteInt32(n); for (int i = 0; i < bits.Length; i++) { if (truncate && i == mn) { _writer.Write(unchecked((ushort)(bits[i]))); } else { _writer.Write(bits[i]); } } }