Rust 类型将字符串转换为字节(不转换)

Rust Type cast String as Bytes (without converting)

提问人:Zubayr 提问时间:3/31/2023 更新时间:3/31/2023 访问量:112

问:

我使用 tokio 将签名的字节流作为字符串发送stream.write_all(sign.as_bytes()).await.unwrap();

在客户端,我将其作为字符串获取,例如:

[132, 40, 243, 14, 49, 231, 64, 130, 236, 226, 5, 180, 166, 50, 2, 49, 124, 248, 235, 53, 7, 204, 124, 101, 54, 230, 225, 25, 201, 47, 159, 52]

现在要用公钥验证签名,我需要将其用作字节(我使用的 crate 不允许将签名用作字符串) 但问题是,当我将符号转换为字节()时,它会将字符串转换为字节流,例如:as_bytes()

[91, 49, 51, 50, 44, 32, 52, 48, 44, 32, 50, 52, 51, 44, 32, 49, 52, 44, 32, 52, 57, 44, 32, 50, 51, 49, 44, 32, 54, 52, 44, 32, 49, 51, 48, 44, 32, 50, 51, 54, 44, 32, 50, 50, 54, 44, 32, 53, 44, 32, 49, 56, 48, 44, 32, 49, 54, 54, 44, 32, 53, 48, 44, 32, 50, 44, 32, 52, 57, 44, 32, 49, 50, 52, 44, 32, 50, 52, 56, 44, 32, 50, 51, 53, 44, 32, 53, 51, 44, 32, 55, 44, 32, 50, 48, 52, 44, 32, 49, 50, 52, 44, 32, 49, 48, 49, 44, 32, 53, 52, 44, 32, 50, 51, 48, 44, 32, 50, 50, 53, 44, 32, 50, 53, 44, 32, 50, 48, 49, 44, 32, 52, 55, 44, 32, 49, 53, 57, 44, 32, 53, 50, 93]

但是我想将确切的字符串类型转换为字节。 所以字节也应该是这样的:

[132, 40, 243, 14, 49, 231, 64, 130, 236, 226, 5, 180, 166, 50, 2, 49, 124, 248, 235, 53, 7, 204, 124, 101, 54, 230, 225, 25, 201, 47, 159, 52]

关于如何做到这一点的任何建议?

字符串 蚀铸造 字节

评论

1赞 Caesar 3/31/2023
我不认为“演员”意味着你认为的意思。首先,“cast”通常是万无一失的,但是如果您得到的字符串显示呢?密钥应该包含哪些字节? 将为您提供实际字节,例如,它将为您提供 ASCII/UTF8 值。您需要解析字符串,即将三个字节转换为一个字节。示例:this 或 with .[42, lolnope {}#str::as_bytes92'['"132"serde_json::from_str::<Vec<u8>>(s)

答:

1赞 drewtato 3/31/2023 #1

您需要将字符串反序列化为某处的字节。越早越好,因为字节占用的空间比字符串少得多,但您可以根据需要做出决定。

您还需要弄清楚您的输入是哪种格式。我假设这个答案是 JSON。下面使用 serde_json 将字符串反序列化为 .(游乐场)Vec<u8>

// Replace this with wherever your input comes from.
let input = "[132, 40, 243, 14, 49, 231, 64, 130, 236, 226, 5, 180, 166, 50, 2, 49, 124, 248, 235, 53, 7, 204, 124, 101, 54, 230, 225, 25, 201, 47, 159, 52]";
let bytes: Vec<u8> = serde_json::from_str(input).unwrap();
stream.write_all(&bytes).await.unwrap();