用于其他语言的String.hashCode后面的dart实现

时间:2019-09-03 21:22:26

标签: flutter dart hashcode

我在Flutter应用程序中错误地依赖String.hashCode的值,并将其存储在服务器端。现在,我希望能够在nodeJS中计算字符串的哈希码,并获得与dart相同的结果...

如何实现?在dart中找不到String.hashCode的实际实现。

2 个答案:

答案 0 :(得分:0)

String.hashCode的vm实现可以在github(https://github.com/dart-lang/sdk)的sdk存储库中找到:

示例:

答案 1 :(得分:0)

这是一个简单的 Swift 实现,它应该为 iOS 和 Flutter 中的简单字符串返回相同的 hashCode 值:

extension String {
  func hashCode() -> UInt32 {
    var hash: UInt32 = 0
    for i in unicodeScalars.filter({ $0.isASCII }).map({ $0.value }) {
      hash = hash &+ i
      hash = hash &+ (hash << 10)
      hash = hash ^ (hash >> 6)
    }
    hash = hash &+ (hash << 3)
    hash = hash ^ (hash >> 11)
    hash = hash &+ (hash << 15)
    hash = hash & ((1 << 30) &- 1)
    return (hash == 0) ? 1 : hash
  }
}