writeSignedInt static method

String writeSignedInt(
  1. dynamic value
)

Implementation

static String writeSignedInt(value) {
  if (value == 0 || value == '0') {
    return '00';
  }
  var n = BigInt.from(value).abs();

  var l = n.bitLength;
  var arr = [];
  for (var i = 0; i < l; i += 7) {
    var byte = BigInt.zero;
    if (i == 0) {
      byte = n & BigInt.parse('0x3f');
      n = n >> 6;
    } else {
      byte = n & BigInt.parse('0x7f');
      n = n >> 7;
    }
    if (value < 0 && i == 0) {
      byte = byte | BigInt.parse('0x40');
    }
    if (i + 7 < l) {
      byte = byte | BigInt.parse('0x80');
    }
    arr.add(byte);
  }
  if (l % 7 == 0) {
    arr[arr.length - 1] = arr[arr.length - 1] | BigInt.parse('0x80');
    arr.add(1);
  }
  var output = arr.map((v) {
    int newNum = int.parse(v.toString());
    var str = '0' + newNum.toRadixString(16).toString();
    str = str.substring(str.length - 2);
    return str;
  }).join('');
  return output;
  // return arr
  //     .map((w) => ('0' + w.toRadixString(16))
  //         .substring(0, w.toRadixString(16).length - 2))
  //     .toList()
  //     .join('');
}