Rust之struct与bytes相互转换

引入:

use std::mem;

结构体:

#[derive(Debug)]
struct Person {
    age: i32,
}

struct转换成bytes:

    let person = Person { age: 18 };

    let bytes: &[u8] = unsafe {
        let ptr = &person as *const Person as *const u8;
        std::slice::from_raw_parts(ptr, mem::size_of::<Person>())
    };

bytes转换成struct:

    let person: Person = unsafe { std::ptr::read(bytes.as_ptr() as *const _) };

完整代码:

//main.rs

use std::mem;

#[derive(Debug)]
struct Person {
    age: i32,
}

fn main() {
    let bytes = struct_to_bytes();

    println!("{:?}", bytes);

    let person = bytes_to_struct(bytes);

    println!("{:?}", person);
}

//struct转换bytes
fn struct_to_bytes() -> &'static [u8] {
    let person = Person { age: 18 };

    let bytes: &[u8] = unsafe {
        let ptr = &person as *const Person as *const u8;
        std::slice::from_raw_parts(ptr, mem::size_of::<Person>())
    };

    bytes
}

//bytes转换struct
fn bytes_to_struct(bytes: &[u8]) -> Person {
    let person: Person = unsafe { std::ptr::read(bytes.as_ptr() as *const _) };

    return person;
}

猜你喜欢

转载自blog.csdn.net/love906897406/article/details/131384666
今日推荐