rust print hex ptr


pub fn dumphexptr(hexptr: *mut u8, length: usize) -> i32 {
    unsafe {
        let cap = 0x1000;
        let hexvec: Vec<u8> = Vec::from_raw_parts(hexptr, length, cap);
        let count = length / 16;
        let orgval: u8 = 0;
        for i in 0..count {
            let baseidx = i * 16;
            let val0: &u8 = hexvec.get(baseidx).unwrap_or(&orgval);
            let val1: &u8 = hexvec.get(baseidx + 1).unwrap_or(&orgval);
            let val2: &u8 = hexvec.get(baseidx + 2).unwrap_or(&orgval);
            let val3: &u8 = hexvec.get(baseidx + 3).unwrap_or(&orgval);
            let val4: &u8 = hexvec.get(baseidx + 4).unwrap_or(&orgval);
            let val5: &u8 = hexvec.get(baseidx + 5).unwrap_or(&orgval);
            let val6: &u8 = hexvec.get(baseidx + 6).unwrap_or(&orgval);
            let val7: &u8 = hexvec.get(baseidx + 7).unwrap_or(&orgval);
            let val8: &u8 = hexvec.get(baseidx + 8).unwrap_or(&orgval);
            let val9: &u8 = hexvec.get(baseidx + 9).unwrap_or(&orgval);
            let val10: &u8 = hexvec.get(baseidx + 10).unwrap_or(&orgval);
            let val11: &u8 = hexvec.get(baseidx + 11).unwrap_or(&orgval);
            let val12: &u8 = hexvec.get(baseidx + 12).unwrap_or(&orgval);
            let val13: &u8 = hexvec.get(baseidx + 13).unwrap_or(&orgval);
            let val14: &u8 = hexvec.get(baseidx + 14).unwrap_or(&orgval);
            let val15: &u8 = hexvec.get(baseidx + 15).unwrap_or(&orgval);
            print!(
                "{:04x}: {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x}",
                i, val0, val1, val2, val3, val4, val5, val6, val7,val8, val9, val10, val11, val12, val13, val14, val15
            );

            let baseend: usize = baseidx + 16;
            let mut strout = CString16::new();
            for idx in baseidx..baseend {
                let val = *hexvec.get(idx).unwrap_or(&orgval) as u16;
                if (val >= 0x20) {
                    let valchar = Char16::from_u16_unchecked(val);
                    if (valchar.is_ascii()) {
                        strout.push(valchar);
                    } else {
                        strout.push(Char16::try_from('.').unwrap())
                    }
                } else {
                    strout.push(Char16::try_from('.').unwrap())
                }
            }

            print!(" {}\n", strout);
        }

        0
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值