我正在编写一个用于加密网络通信的小型客户端/服务器程序,并具有以下结构以允许端点协商功能。
{
我需要将字段转换为字节,以便通过}
发送它们,但我目前必须一次转换它们。
struct KeyExchangePacket {
kexinit: u8,
replay_cookie: [u8; 32],
kex_algorithms: String,
kgen_algorithms: String,
encryption_algorithms: String,
mac_algorithms: String,
compression_algorithms: String,
supported_languages: String,
}
有没有办法迭代字段并将其字节值推送到缓冲区以便发送?
答案 0 :(得分:7)
有没有办法迭代字段
没有。你必须自己实现它,或者找一个能为你完成它的宏/编译器插件。
有关类似问题,请参阅How to iterate or map over tuples?。
考虑迭代器的工作原理。迭代器必须为每次迭代生成单类型。对于由至少3种不同类型组成的结构,该类型会是什么类型?
答案 1 :(得分:0)
Bincode这样做。
let packet = KeyExchangePacket { /* ... */ };
let size_limit = bincode::SizeLimit::Infinite;
let encoded: Vec<u8> = bincode::serde::serialize(&packet, size_limit).unwrap();
自述文件:
编码(从而解码)不出所料 - 原始类型根据底层Writer进行编码,元组和结构通过逐个编码字段进行编码,枚举通过首先写出代表的标记进行编码变体,然后是内容。