我有一个DNS数据包类,看起来像这样(我粘贴只是其中的一部分):反序列化一个DNS包对象在C++ 11
class DNSPacket {
public:
struct DNSHeader {
unsigned int ID :16;
unsigned int QR :1;
unsigned int OPCODE :4;
unsigned int AA :1;
unsigned int TC :1;
unsigned int RD :1;
unsigned int RA :1;
unsigned int Z :3;
unsigned int RCODE :4;
unsigned int QDCOUNT :16;
unsigned int ANCOUNT :16;
unsigned int NSCOUNT :16;
unsigned int ARCOUNT :16;
};
private:
DNSHeader header;
std::vector<DNSQuestion> questions;
std::vector<DNSAnswer> answers;
std::vector<DNSAnswer> nameservers; // TODO: DNSAnswer?
std::vector<DNSAnswer> add_records; // TODO: DNSAnswer?
}
什么是反序列化char
的正确方法数组到这个对象?我有的选项是:重载>>
运算符,添加一个单独的类以反序列化它以读取并反序列化字节后的数据读取字节并使用reinterpret_cast()
。
我想在C++ 11中创建一个快速,现代的实现。我应该选择哪种方式?另外,我应该如何反序列化位域 - 我应该坚持按位运算吗?
char数组的格式是什么? – Surt
这是一个封装了一些(问题或答案)DNS数据包的UDP数据帧。 – syntagma
您的结构是错误的,根据[this](http://www.comptechdoc.org/independent/networking/terms/dns-message-format.html),“Z”字段是三位。 –