Flutter哈希计算插件murmur3的使用
Flutter哈希计算插件murmur3的使用
MurmurHash v3 for Dart & Flutter,支持数组和流数据源,在原生和浏览器平台上运行。
示例代码
以下是一个完整的示例demo,展示如何在Flutter应用中使用murmur3
插件进行哈希计算。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加murmur3
插件:
dependencies:
flutter:
sdk: flutter
murmur3: ^版本号 # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 使用示例
以下是完整的示例代码,展示了如何使用murmur3
插件进行哈希计算。
import 'dart:typed_data';
import 'package:murmur3/murmur3.dart';
void main() async {
print('');
// 计算32位哈希值
final hash32 = murmur3a('div200').toHex(32);
print('murmur3a(\'div200\') = 0x$hash32');
// 计算128位哈希值
final hash128x64 = murmur3f('div200').toHex(128);
print('murmur3f(\'div200\') = 0x$hash128x64');
// 计算流数据的哈希值
final pkBytes = Stream.fromIterable([0x08, 'div200', 0x00]);
final pkHash = encodeHash((await murmur3a(pkBytes)).toDouble());
print('div200 pk hash = ${pkHash.map((b) => b.toHex(8)).join()}');
print('');
}
// 辅助函数:将哈希值编码为字节数组
final mask64bit = BigInt.parse('0xFFFFFFFFFFFFFFFF');
final max = BigInt.parse('9223372036854775808');
List<int> encodeHash(double value) {
var buffer = <int>[];
buffer.add(0x05);
var num = encodeDoubleAsUInt64(value);
buffer.add((num >> 0x38).toInt() & 0xFF);
num = (num << 8) & mask64bit;
var num2 = 0;
var flag = true;
do {
if (!flag) {
buffer.add(num2);
} else {
flag = false;
}
num2 = ((num >> 0x38).toInt() & 0xFF) | 0x01;
num = (num << 7) & mask64bit;
} while (num != BigInt.zero);
buffer.add(num2 & 0xFE);
return buffer;
}
// 辅助函数:将双精度浮点数编码为无符号64位整数
BigInt encodeDoubleAsUInt64(double value) {
final dl = Float64List.fromList([value]);
var bytes = dl.buffer.asUint8List();
if (Endian.host == Endian.big) {
bytes = Uint8List.fromList(bytes.reversed.toList());
}
var idx = 8;
var hi = 0;
while (idx > 4) {
idx--;
hi = (hi << 8) | bytes[idx];
}
var lo = 0;
while (idx > 0) {
idx--;
lo = (lo << 8) | bytes[idx];
}
final num = (BigInt.from(hi) << 32) | BigInt.from(lo);
return (num >= max) ? (~num + BigInt.one) : (num ^ max);
}
// 扩展方法:将整数转换为十六进制字符串
extension IntHexExt on dynamic {
String toHex(int bits) => toRadixString(16).padLeft(bits ~/ 4, '0').toUpperCase();
}
3. 运行结果
运行上述代码后,你将在控制台看到类似如下的输出:
murmur3a('div200') = 0xXXXXXXXX
murmur3f('div200') = 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
div200 pk hash = XXXXXXXXXXXX
其中XXXXXXXX
代表具体的哈希值。
通过这个示例,你可以轻松地在Flutter应用中集成并使用murmur3
插件进行哈希计算。
更多关于Flutter哈希计算插件murmur3的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复