如何在Dart中实现Python的int.from_bytes功能并获取BigInt?
在Dart中将字节串转换为BigInt(对应Python的
int.from_bytes大端实现) 要实现和Python int.from_bytes(b'hello world', byteorder='big') 完全相同的功能,你可以通过遍历字节并按大端字节序拼接的方式构建BigInt。以下是具体实现:
基础实现代码
void main() { // 将字符串转换为Uint8List,对应Python的bytes对象 Uint8List bytes = Uint8List.fromList('hello world'.codeUnits); BigInt result = BigInt.zero; // 大端字节序:高位字节在前,依次左移拼接 for (int byte in bytes) { result = (result << 8) | BigInt.from(byte); } print(result); // 输出结果:126207244316550804821666916 }
封装为可复用函数
如果需要多次使用,建议封装成带参数的函数,同时支持可选的小端字节序:
BigInt bytesToBigInt(Uint8List bytes, {bool bigEndian = true}) { BigInt result = BigInt.zero; if (bigEndian) { for (int byte in bytes) { result = (result << 8) | BigInt.from(byte); } } else { // 小端字节序处理:从最后一个字节开始拼接 for (int i = bytes.length - 1; i >= 0; i--) { result = (result << 8) | BigInt.from(bytes[i]); } } return result; } // 使用示例 void main() { Uint8List bytes = Uint8List.fromList('hello world'.codeUnits); BigInt value = bytesToBigInt(bytes); print(value); // 126207244316550804821666916 }
逻辑说明
- 大端字节序下,每个字节依次作为BigInt的高位到低位:每次将当前结果左移8位(等价于乘以256),再与当前字节的BigInt值进行按位或操作,实现字节的拼接。
- 上述代码的输出结果与Python示例完全一致。
内容的提问来源于stack exchange,提问作者trueToastedCode
相关产品推荐
相关产品推荐

