encodeBigInt static method

Uint8List encodeBigInt(
  1. BigInt number
)

Implementation

static Uint8List encodeBigInt(BigInt number) {
  var orig = number;

  if (number.bitLength == 0) {
    if (number == _negOne) {
      return _negOneArray;
    } else {
      return _zeroList;
    }
  }
  // we may need one extra byte for padding
  var bytes = (number.bitLength / 8).ceil() + 1;
  var result = Uint8List(bytes);

  number = number.abs();
  for (var i = 0, j = bytes - 1; i < bytes; i++, --j) {
    var x = number.remainder(_b256).toInt();
    result[j] = x;
    number = number >> 8;
  }

  if (orig.isNegative) {
    _twosComplement(result);
    if ((result[1] & 0x80) == 0x80) {
      // high order bit is a one - we don't need pad
      return result.sublist(1);
    }
  } else {
    if ((result[1] & 0x80) != 0x80) {
      // hi order bit is a 0, we dont need pad
      return result.sublist(1);
    }
  }
  return result;
}