splitU256ToU64Parts static method
Implementation
static List<BigInt> splitU256ToU64Parts(
BigInt number, {
Endian order = Endian.big,
}) {
if (number.isNegative || number.bitLength > 256) {
if (number.isNegative) {
throw ArgumentException.invalidOperationArguments(
"splitU256ToU64Parts",
name: "number",
reason: "Invalid unsigned integer.",
);
}
throw ArgumentException.invalidOperationArguments(
"splitU256ToU64Parts",
name: "number",
reason: "Number is to large.",
);
}
final BigInt hiHi = (number >> 192).toUnsigned(64);
final BigInt hiLo = (number >> 128).toUnsigned(64);
final BigInt loHi = (number >> 64).toUnsigned(64);
final BigInt loLo = number.toUnsigned(64);
// Return order depends on Endian type
if (order == Endian.little) {
// Matches Rust/Substrate `[u64;4]` layout (little-endian)
return [loLo, loHi, hiLo, hiHi];
} else {
// Big-endian (most significant first)
return [hiHi, hiLo, loHi, loLo];
}
}