1pub fn write_u8_le(buffer: &mut [u8], value: u8) {
6 buffer[0] = value;
7}
8
9pub fn read_u8_le(buffer: &[u8]) -> u8 {
14 buffer[0]
15}
16
17pub fn write_u16_le(buffer: &mut [u8], value: u16) {
19 buffer[0] = (value & 0xFF) as u8;
20 buffer[1] = (value >> 8 & 0xFF) as u8;
21}
22
23pub fn read_u16_le(buffer: &[u8]) -> u16 {
25 let low = buffer[0] as u16;
26 let high = buffer[1] as u16;
27 low | high << 8
28}
29
30pub fn write_u32_le(buffer: &mut [u8], value: u32) {
32 write_u16_le(&mut buffer[0..2], (value & 0xFFFF) as u16);
33 write_u16_le(&mut buffer[2..4], (value >> 16 & 0xFFFF) as u16);
34}
35
36pub fn read_u32_le(buffer: &[u8]) -> u32 {
38 let low = read_u16_le(&buffer[0..2]) as u32;
39 let high = read_u16_le(&buffer[2..4]) as u32;
40 low | high << 16
41}
42
43#[cfg(test)]
44mod test {
45 use super::*;
46 use assert2::assert;
47
48 #[test]
49 fn test_write_u16_le() {
50 let mut buffer = [0xFF; 4];
51 write_u16_le(&mut buffer[0..], 0x0000);
52 assert!(buffer == [0x00, 0x00, 0xFF, 0xFF]);
53
54 write_u16_le(&mut buffer[2..], 0x1234);
55 assert!(buffer == [0x00, 0x00, 0x34, 0x12]);
56 }
57
58 #[test]
59 fn test_read_u16_le() {
60 assert!(read_u16_le(&[0x00, 0x00, 0x34, 0x12]) == 0);
61 assert!(read_u16_le(&[0x34, 0x12]) == 0x1234);
62 }
63
64 #[test]
65 fn test_write_u32_le() {
66 let mut buffer = [0xFF; 8];
67 write_u32_le(&mut buffer[0..], 0x0000);
68 assert!(buffer == [0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF]);
69
70 write_u32_le(&mut buffer[4..], 0x12345678);
71 assert!(buffer == [0x00, 0x00, 0x00, 0x00, 0x78, 0x56, 0x34, 0x12]);
72 }
73
74 #[test]
75 fn test_read_u32_le() {
76 assert!(read_u32_le(&[0x00, 0x00, 0x00, 0x00, 0x78, 0x56, 0x34, 0x12]) == 0);
77 assert!(read_u32_le(&[0x78, 0x56, 0x34, 0x12]) == 0x12345678);
78 }
79}