c_math 0.1.1

这是一个用于基础数据转换操作的一个包
Documentation
///调换u16的高低字节
pub fn swap_u16_bytes(data:u16)->u16{
    (data >> 8) | (data << 8)
}
///按字调换u32的高低字节
pub fn swap_u32_bytes(data:u32)->u32{
    //取出高字部分
    let high_word = ((data >> 16) & 0xFFFF) as u16;
    //取出低字部分
    let low_word = (data & 0xFFFF)as u16;
    //高字部分交换高低字节
    let high_word=((high_word>>8)|(high_word<<8)) as u32;
    //低字部分交换高低字节
    let low_word=((low_word>>8)|(low_word<<8)) as u32;
    //高字部分和低字部分合并
    (low_word << 16) | high_word
}
///按字调换u64的高低字节
pub fn swap_u64_bytes(data:u64)->u64{
    //按字取出u64中的各个字,word0位最低位字
    let word0:u16=(data&0xFFFF) as u16;
    let word1:u16=((data>>16)&0xFFFF) as u16;
    let word2:u16=((data>>32)&0xFFFF) as u16;
    let word3:u16=((data>>48)&0xFFFF) as u16;
    //对取出的字交换高低字节,然后转换成u64
    let word0=(word0>>8|word0<<8) as u64;
    let word1=(word1>>8|word1<<8) as u64;
    let word2=(word2>>8|word2<<8) as u64;
    let word3=(word3>>8|word3<<8) as u64;

    //合并输出
    (word3<<48)|(word2<<32)|(word1<<16)|word0
    //取出高字部分
    // let high_word = ((data >> 32) & 0xFFFFFFFF) as u32;
    // //下面代码是对high_word的处理
    // let high_word1 = ((high_word >> 16) & 0xFFFF) as u16;
    // //取出低字部分
    // let low_word1 = (high_word & 0xFFFF)as u16;
    // //高字部分交换高低字节
    // let high_word1=((high_word1>>8)|(high_word1<<8)) as u32;
    // //低字部分交换高低字节
    // let low_word1=((low_word1>>8)|(low_word1<<8)) as u32;
    // //高字部分和低字部分合并
    // let result_high=((low_word1 << 16) | high_word1) as u64;
    // //取出低字部分
    // let low_word = (data & 0xFFFFFFFF)as u32;
    // //取出low_word中高字部分
    // let high_word1 = ((low_word >> 16) & 0xFFFF) as u16;
    // //取出低字部分
    // let low_word1 = (low_word & 0xFFFF)as u16;
    // //高字部分交换高低字节
    // let high_word1=((high_word1>>8)|(high_word1<<8)) as u32;
    // //低字部分交换高低字节
    // let low_word1=((low_word1>>8)|(low_word1<<8)) as u32;
    // //高字部分和低字部分合并
    // let result_low=((low_word1 << 16) | high_word1) as u64;

    //高字部分交换高低字节

    //高字部分和低字部分合并
    // (result_low << 32) | result_high
}
#[cfg(test)]
mod test{
    use super::*;
    #[test]
    pub fn test_swap_u16_bytes(){
        let data:u16=0b11000011_00110011;
        assert_eq!(0b00110011_11000011,swap_u16_bytes(data));
        let data:u16=0b10101010_01010101;
        assert_eq!(0b01010101_10101010,swap_u16_bytes(data));
    }
    #[test]
    pub fn test_swap_u32_bytes(){
        let data:u32=0b11001100_00110011_11001100_00110011;
        assert_eq!(0b00110011_11001100_00110011_11001100,swap_u32_bytes(data));
    }
    #[test]
    pub fn test_swap_u64_bytes(){
        let data:u64=0b11001100_00110011_11001100_00110011_11001100_00110011_11001100_00110011;
        assert_eq!(0b00110011_11001100_00110011_11001100_00110011_11001100_00110011_11001100,swap_u64_bytes(data));
        let data:u64=0b11001101_00110010_11001100_00110011_11001100_00110011_11001100_00110011;
        assert_eq!(0b00110010_11001101_00110011_11001100_00110011_11001100_00110011_11001100,swap_u64_bytes(data));
    }
}