You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:20:17