Untitled
unknown
rust
a year ago
1.5 kB
7
Indexable
pub fn decode_some_bytes(bytes: &[u8]) -> Result<(), Box<dyn std::error::Error + Send + Sync>> { // first two bytes should be id (u16) // little endian let index: u16 = (bytes[0] as u16) << 8 | bytes[1] as u16; println!("index: {}", index); // second two bytes should be flags // going to skip the second byte for now let is_question = bytes[2] & 0b1000_0000 == 0; let op_code = bytes[2] & 0b0111_1000 >> 3; let is_truncated = bytes[2] & 0b0000_0010 != 0; let is_recursive = bytes[2] & 0b0000_0001 != 0; // starting from 4th index let num_of_questions: u16 = (bytes[4] as u16) << 8 | bytes[5] as u16; let num_of_arr: u16 = (bytes[6] as u16) << 8 | bytes[7] as u16; let num_of_ar: u16 = (bytes[8] as u16) << 8 | bytes[9] as u16; let num_of_additional_rrs: u16 = (bytes[10] as u16) << 8 | bytes[11] as u16; // answer section starting from 12th index let mut idx_end = 12; while bytes[idx_end] != 0x00 { idx_end += 1; } let q_name = String::from_utf8(bytes[12..idx_end].to_vec()).unwrap(); println!("is_question: {}", is_question); println!("op_code: {}", op_code); println!("is_truncated: {}", is_truncated); println!("is_recursive: {}", is_recursive); println!("num_of_questions: {}", num_of_questions); println!("num_of_arr: {}", num_of_arr); println!("num_of_ar: {}", num_of_ar); println!("num_of_additional_rrs: {}", num_of_additional_rrs); println!("q_name: {}", q_name); Ok(()) }
Editor is loading...