84 lines
1.6 KiB
Rust
84 lines
1.6 KiB
Rust
pub fn pack_u8(value:u8) -> Vec<u8>
|
|
{
|
|
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<u8>
|
|
{
|
|
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<u8>
|
|
{
|
|
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<u8>
|
|
{
|
|
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
|
|
}
|