c_math 0.1.1

这是一个用于基础数据转换操作的一个包
Documentation
///把u8的高低位顺序调换
pub fn reverse_u8_bits(data: u8) -> u8 {
    let mut result = 0;
    for i in 0..8 {
        let bit = (data >> i) & 1; // 取出data的第i位
        result |= bit << (7 - i); // 将其放到result的对应位置
    }
    result
}
///把u16的高低位顺序调换
pub fn reverse_u16_bits(data: u16) -> u16 {
    let mut result = 0;
    for i in 0..16 {
        let bit = (data >> i) & 1; // 取出data的第i位
        result |= bit << (15 - i); // 将其放到result的对应位置
    }
    result
}
///把u32的高低位顺序调换
pub fn reverse_u32_bits(data: u32) -> u32 {
    let mut result = 0;
    for i in 0..32 {
        let bit = (data >> i) & 1; // 取出data的第i位
        result |= bit << (31 - i); // 将其放到result的对应位置
    }
    result
}
///把u64的高低位顺序调换
pub fn reverse_u64_bits(data: u64) -> u64 {
    let mut result = 0;
    for i in 0..64 {
        let bit = (data >> i) & 1; // 取出data的第i位
        result |= bit << (63 - i); // 将其放到result的对应位置
    }
    result
}
///把u128的高低位顺序调换
pub fn reverse_u128_bits(data: u128) -> u128 {
    let mut result = 0;
    for i in 0..128 {
        let bit = (data >> i) & 1; // 取出data的第i位
        result |= bit << (127 - i); // 将其放到result的对应位置
    }
    result
}

#[cfg(test)]
mod test {
    use super::*;
    use std::fs::create_dir_all;
    #[test]
    pub fn test_revese_u8_bits() {
        let data: u8 = 0b0000_1010;
        assert_eq!(0b0101_0000, reverse_u8_bits(data));
        let data: u8 = 0b1010_1010;
        assert_eq!(0b0101_0101, reverse_u8_bits(data));
        let data: u8 = 0b1100_0011;
        assert_eq!(0b1100_0011, reverse_u8_bits(data));
    }
    #[test]
    pub fn test_revese_u16_bits() {
        let data: u16 = 0b0000_1010_0000_1010;
        assert_eq!(0b0101_0000_0101_0000, reverse_u16_bits(data));
        let data: u16 = 0b1010_1010_1010_1010;
        assert_eq!(0b0101_0101_0101_0101, reverse_u16_bits(data));
        let data: u16 = 0b1100_0011_1100_0011;
        assert_eq!(0b1100_0011_1100_0011, reverse_u16_bits(data));
    }
    #[test]
    pub fn test_revese_u32_bits() {
        let data: u32 = 0b0000_1010_0000_1010_0000_1010_0000_1010;
        assert_eq!(
            0b0101_0000_0101_0000_0101_0000_0101_0000,
            reverse_u32_bits(data)
        );
        let data: u32 = 0b1010_1010_1010_1010_1010_1010_1010_1010;
        assert_eq!(
            0b0101_0101_0101_0101_0101_0101_0101_0101,
            reverse_u32_bits(data)
        );
        let data: u32 = 0b1100_0011_1100_0011_1100_0011_1100_0011;
        assert_eq!(
            0b1100_0011_1100_0011_1100_0011_1100_0011,
            reverse_u32_bits(data)
        );
    }
    #[test]
    pub fn test_revese_u64_bits() {
        let data: u64 =
            0b0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010;
        assert_eq!(
            0b0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000,
            reverse_u64_bits(data)
        );
        let data: u64 =
            0b1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010;
        assert_eq!(
            0b0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101,
            reverse_u64_bits(data)
        );
        let data: u64 =
            0b1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011;
        assert_eq!(
            0b1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011,
            reverse_u64_bits(data)
        );
    }
    #[test]
    pub fn test_revese_u128_bits() {
        let data:u128=0b0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010;
        assert_eq!(
            0b0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000,
            reverse_u128_bits(data)
        );
        let data: u128 =
            0b1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010;
        assert_eq!(
            0b0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101,
            reverse_u128_bits(data)
        );
        let data: u128 =
            0b1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011;
        assert_eq!(
            0b1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011,
            reverse_u128_bits(data)
        );
    }
}