我有一個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」字段是三位。 –