pub fn pack_u8(value:u8) -> Vec { vec![value] } pub fn unpack_u8(data:&[u8], index:&mut usize) -> u8 { let mut result = 0u8; if *index < data.len() { result = data[*index]; *index += 1; } result } pub fn pack_u16(value:u16) -> Vec { vec![(value >> 8) as u8, (value & 0xFF) as u8] } pub fn unpack_u16(data:&[u8], index:&mut usize) -> u16 { let mut result = 0u16; if *index < data.len() { result = (data[*index] as u16) << 8; *index += 1; } if *index < data.len() { result |= data[*index] as u16; *index += 1; } result } pub fn pack_u32(value:u32) -> Vec { vec![ (value >> 24) as u8, (value >> 16) as u8, (value >> 8) as u8, (value & 0xFF) as u8, ] } pub fn unpack_u32(data:&[u8], index:&mut usize) -> u32 { let mut result = 0u32; for _ in 0..4 { result <<= 8; if *index < data.len() { result |= data[*index] as u32; *index += 1; } else { break; } } result } pub fn pack_u64(value:u64) -> Vec { vec![ (value >> 56) as u8, (value >> 48) as u8, (value >> 40) as u8, (value >> 32) as u8, (value >> 24) as u8, (value >> 16) as u8, (value >> 8) as u8, (value & 0xFF) as u8, ] } pub fn unpack_u64(data:&[u8], index:&mut usize) -> u64 { let mut result = 0u64; for _ in 0..8 { result <<= 8; if *index < data.len() { result |= data[*index] as u64; *index += 1; } else { break; } } result }