OMNeT++ cPacket as std::bitset 以应用 Reed-Solomon 编码
OMNeT++ cPacket as std::bitset to apply Reed-Solomon encoding
有数据包
cPacket *pk
如何获取它的位表示?例如,以
的形式
std::bitset<pk->getBitLength()> pk_bits;
我的最终目标是对数据包应用一种编码方案,即 Reed-Solomon 编码。
正如@rcgldr 评论的那样,一个简单的 cPacket 本身不包含任何数据,至少在真实数据包的意义上是这样。在大多数模型中,这不是必需的,因为它们在更高、更抽象的层次上运行,这使得使用它们更容易,并且 运行 它们更快。
在模拟节点之间传输的信息是您放入消息字段中的信息(最好是使用 OMNeT++ 的消息编译器从 .msg 文件中定制)。
但是,这完全独立于 cPacket class 的 bitLength/byteLength 属性,它只是一个数字,可以为任何消息设置任何值。
当然,您可以选择通过在消息中添加对应于真实(主义)网络协议 header 的字段来模拟真实协议,例如 TCP 或 IP,甚至是您刚刚制作的东西向上。但这仍然不提供任何(可靠的)byte-sequence-like 访问内容,因为如何将各个字段序列化为简单的八位字节并不总是微不足道的。
为了实现这一点,例如,INET 为其许多自定义消息类型提供了单独的 *[De]Serializer classes。如果你愿意,你可以对你的做同样的事情。
一个更简单的解决方案是通过添加 std::vector<unsigned char>
或什至 std::bitset
来表示数据包中的任何有效负载,如果您愿意的话。并将该部分与易于访问的字段分开处理,对其内容应用任何编码。
最后,就像 "how to add an encryption library to a simulation and use it to transform packets" 这样的问题一样:您确定要添加真实的 byte-by-byte encoder/serializer/etc。 模拟 是实现您想要做的事情的正确选择吗?我的意思是,有可能,而且有可能,但可能有 better/simpler/faster 种方法。造型方面
有数据包
cPacket *pk
如何获取它的位表示?例如,以
的形式std::bitset<pk->getBitLength()> pk_bits;
我的最终目标是对数据包应用一种编码方案,即 Reed-Solomon 编码。
正如@rcgldr 评论的那样,一个简单的 cPacket 本身不包含任何数据,至少在真实数据包的意义上是这样。在大多数模型中,这不是必需的,因为它们在更高、更抽象的层次上运行,这使得使用它们更容易,并且 运行 它们更快。
在模拟节点之间传输的信息是您放入消息字段中的信息(最好是使用 OMNeT++ 的消息编译器从 .msg 文件中定制)。
但是,这完全独立于 cPacket class 的 bitLength/byteLength 属性,它只是一个数字,可以为任何消息设置任何值。
当然,您可以选择通过在消息中添加对应于真实(主义)网络协议 header 的字段来模拟真实协议,例如 TCP 或 IP,甚至是您刚刚制作的东西向上。但这仍然不提供任何(可靠的)byte-sequence-like 访问内容,因为如何将各个字段序列化为简单的八位字节并不总是微不足道的。
为了实现这一点,例如,INET 为其许多自定义消息类型提供了单独的 *[De]Serializer classes。如果你愿意,你可以对你的做同样的事情。
一个更简单的解决方案是通过添加 std::vector<unsigned char>
或什至 std::bitset
来表示数据包中的任何有效负载,如果您愿意的话。并将该部分与易于访问的字段分开处理,对其内容应用任何编码。
最后,就像 "how to add an encryption library to a simulation and use it to transform packets" 这样的问题一样:您确定要添加真实的 byte-by-byte encoder/serializer/etc。 模拟 是实现您想要做的事情的正确选择吗?我的意思是,有可能,而且有可能,但可能有 better/simpler/faster 种方法。造型方面