Files
rsp6-decoder/src/cursed.rs
2022-12-30 13:33:34 +00:00

53 lines
1.3 KiB
Rust

pub fn slice_bool(a: &[u8], index: usize) -> bool {
(a[index / 8] >> (7 - (index % 8))) == 1
}
pub fn slice_int(a: &[u8], start_bit: usize, length_bits: usize) -> u32 {
let i = start_bit as u32;
let i2 = length_bits as u32;
let mut i3: u32 = (i as u32) & 7;
let mut i4: u32 = i3;
let mut i5: u32 = (i as u32) >> 3;
let mut i6: u32 = (1 << (8 - i3)) - 1;
let mut i7: u32 = 0;
let mut i8: u32 = 0;
while (i2 - i7) > 0 {
i8 |= (i6 & a[i5 as usize] as u32) << ((i4 + 24) - i7);
i7 += 8 - i4;
i6 = 255;
i4 = 0;
i5 += 1;
}
i8 >> (32 - i2)
}
pub fn slice_base64(a: &[u8], start_bit: usize, chars: usize) -> String {
let mut sb = String::new();
let mut i = start_bit as u32;
let mut i2 = chars as u32;
let mut i3: u32 = i & 7;
let mut i4: u32 = i3;
let mut i5: u32 = i >> 3;
let mut i6: u32 = (1 << (8 - i3)) - 1;
let mut i7: u32 = 0;
let mut i8: u32 = 0;
while i2 > 0 {
if i7 >= 6 {
sb.push(((i8 >> 26) + 32) as u8 as char);
i8 <<= 6;
i7 -= 6;
i2 -= 1;
} else {
i8 |= (i6 & a[i5 as usize] as u32) << ((i4 + 24) - i7);
i7 += 8 - i4;
i6 = 255;
i4 = 0;
i5 += 1
}
}
sb
}