Dart中与struct.pack('<I', int)功能等效的函数是什么?
Dart 中实现等效 pack 字节打包功能的方法
Dart 原生提供了完全等效的字节打包能力,无需引入第三方依赖,核心依赖标准库的 dart:typed_data 模块即可实现。
你问题中给出的 struct.pack('<I', 5311) 功能是将整数 5311 按*小端序(little-endian)*打包为4字节无符号32位整数,对应 Dart 的实现代码如下:
import 'dart:typed_data'; void main() { // 申请4字节的内存缓冲区,匹配<I>格式需要的4字节长度 final byteData = ByteData(4); // 写入32位无符号整数,指定小端序 byteData.setUint32(0, 5311, Endian.little); // 转换为字节列表,输出和示例完全一致的 [0, 0, 20, 191] final result = byteData.buffer.asUint8List(); print(result); }
执行上述代码输出的结果和你给出的Python、JS执行结果完全一致。
常用格式符对应实现
针对Python struct模块的常用格式符,Dart都有对应的实现方法:
- 1字节无符号整型(格式符
B):调用setUint8(偏移量, 值) - 2字节小端无符号短整型(格式符
<H):调用setUint16(偏移量, 值, Endian.little) - 4字节小端有符号整型(格式符
<i):调用setInt32(偏移量, 值, Endian.little) - 8字节小端双精度浮点型(格式符
<d):调用setFloat64(偏移量, 值, Endian.little)
如果需要和Python的pack方法一样直接传入格式字符串批量打包,可以基于ByteData自行封装一层工具函数,完全可以实现和其他语言pack方法一致的调用体验。
内容的提问来源于stack exchange,提问作者Guy Luz
相关产品推荐
相关产品推荐

