在 rust 中,您不应该真正从十六进制表示开始,而是要使用字节。
hex_literal::hex
但假设您有十六进制,您可以使用宏将十六进制字符串转换为 AccountId 字节:
let account: AccountId32 = hex_literal::hex!["d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"].into(),
请注意,0x
从十六进制文字中省略了。
现在你应该已经[u8; 32]
包裹在AccountId32
身份结构中了。
Display
从那里,您可以简单地执行与for实现中相同的逻辑AccountId32
:
#[cfg(feature = "std")]
impl std::fmt::Display for AccountId32 {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.to_ss58check())
}
}
基本上,地址是ss58
帐户 ID 字节的编码版本。
可以在此处找到 ss58 编解码器库:https ://substrate.dev/rustdocs/master/sp_core/crypto/trait.Ss58Codec.html