我正在散列一个字符串。
let src = String::from("abcd12342020");
let h1 = sha2::Sha256::digest(&src.as_bytes());
let h2 = sha2::Sha256::digest(hex::decode(&src).expect("this is not hex"));
h1
并且h2
是不同的。其根本原因是什么?字节表示和十六进制解码有什么区别?(试图提供一个游乐场,但hex
那里无法创建)
我正在散列一个字符串。
let src = String::from("abcd12342020");
let h1 = sha2::Sha256::digest(&src.as_bytes());
let h2 = sha2::Sha256::digest(hex::decode(&src).expect("this is not hex"));
h1
并且h2
是不同的。其根本原因是什么?字节表示和十六进制解码有什么区别?(试图提供一个游乐场,但hex
那里无法创建)
首先:我是 Rust 的新手;学习。
这个问题很可能是由其他语言的思考引起的。因此,最好的解决方案很可能是以完全不同的方式进行。事情甚至还没有编译,所以如果代码有根本问题,我们深表歉意。
我正在定义我的第一个特质。特征函数有 2 个参数,它们将定义输出。
trait SkFormatter {
fn to_sk(&self, key:Key, is_foreign: bool) -> String;
}
这个想法是,实现将采用一个字符串变量,然后根据键添加一个字符串,并附加一个字符串 if is_foreign
(后一部分与问题无关)。
例如
MT-1c2af34
WD-54bdf36-FX
WD-ad3425b
由于这些字符串是不变的,我想我可以将其作为全局映射来完成。所以我首先创建了
pub enum Key {
// there are 7 items, but keeping it short here
Metal,
Wood,
}
然后我想创建映射,事情开始变得棘手。首先尝试了 HashMap:
use std::collections::HashMap;
static KEY_TO_PRE:HashMap<Key,&str> = HashMap::from([
(Key::Metal,"MT-"),
(Key::Wood, "WD-"),
]);
但这是在抱怨
Key: std::hash::Hash
不满足特征界限
这让我感到惊讶,因为它似乎表明该键不可散列,但我没有为其定义类型,并且我假设“类似单元”的枚举类型(如文档所示)是某种整数或者其他的东西?
我已经看到了这个match
习惯用法,也许我应该在实现内部尝试一下(全局或静态的东西对我来说很臭),但我不清楚匹配的东西是否优化了重用,因为它会被一遍又一遍地调用。
刚刚学习...