< 返回版块

Borber 发表于 2022-01-03 16:23

Tags:hash

我最近在写一个练手的项目, 中间遇到了一个小问题

我想根据一个字符串生成一个数字 (最好是直接生成 u8), 需要结果是唯一的, 所以自然想到了 hash.但我发现 rust 中并没有实现好的. 我目前的解决方案是 先使用 blake3 计算出字符串的 hash 值, 之后获取 u8 array 的sum. 但我觉得应该会有更优雅的解决方案, 所以来请教各位大佬.

我目前的方案源码: https://github.com/Borber/Whisperer/blob/master/src/hash.rs

评论区

写评论
作者 Borber 2022-01-17 17:43

就是 一串字符 -> 唯一 u8 不是 唯一u8 -> 一串字符啦,

--
👇
苦瓜小仔: u8 范围内还需要唯一??

苦瓜小仔 2022-01-06 17:38

u8 范围内还需要唯一??

作者 Borber 2022-01-06 17:35

额, 这个我其实知道的, 我现在用的 blake3 也能做到类似的事, 但我想有没有 就直接只生成 [150] 这一个数的可能

--
👇
苦瓜小仔: ```RUST fn main() { use std::collections::hash_map::DefaultHasher; use std::hash::{Hash, Hasher};

let mut hasher = DefaultHasher::new();
let s = "aaa";
s.hash(&mut hasher);
let h = hasher.finish();
println!("`{}` hash is {}, hash bytes is {:?}", s, h, h.to_be_bytes());
// `aaa` hash is 10827978515143807110, hash bytes is [150, 68, 181, 23, 38, 181, 80, 134]

}


苦瓜小仔 2022-01-06 17:33
fn main() {
    use std::collections::hash_map::DefaultHasher;
    use std::hash::{Hash, Hasher};

    let mut hasher = DefaultHasher::new();
    let s = "aaa";
    s.hash(&mut hasher);
    let h = hasher.finish();
    println!("`{}` hash is {}, hash bytes is {:?}", s, h, h.to_be_bytes());
    // `aaa` hash is 10827978515143807110, hash bytes is [150, 68, 181, 23, 38, 181, 80, 134]
}
作者 Borber 2022-01-06 16:27

额, 我就想生成的结果是 u8, 最好是直接生成 而不是生成一个别的然后截取一段做结果

--
👇
jiuker: 如果rust连hash都没有,那么这个语言可以归西了 HashSet HashMap都有

jiuker 2022-01-04 10:57

如果rust连hash都没有,那么这个语言可以归西了 HashSet HashMap都有

Grobycn 2022-01-03 16:26

https://doc.rust-lang.org/std/hash/index.html

1 共 7 条评论, 1 页