You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中操作缓冲区内存?附C代码转Rust需求

如何用Rust实现C风格的缓冲区内存操作?

Rust确实没有C语言里那种直接的强制类型转换,但可以通过**不安全代码块(unsafe)**实现类似的内存指针操作——这类操作会绕过Rust的安全检查,需要你自行保证内存访问的合法性(比如缓冲区长度足够、内存对齐正确等)。

下面是和你提供的C代码逻辑完全一致的Rust实现:

fn main() {
    // 初始化字节缓冲区,对应C中的char数组
    let mut buffer: [u8; 10] = [0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa];

    unsafe {
        // 从缓冲区起始地址读取4字节,转换为i32(对应C的int)
        let mut a = *(buffer.as_ptr() as *const i32);
        a = 0xdeadc0de;
        // 将修改后的值写回缓冲区起始位置
        *(buffer.as_mut_ptr() as *mut i32) = a;

        // 从缓冲区第5个字节(索引4)处读取2字节,转换为i16(对应C的short)
        let mut b = *(buffer.as_ptr().add(4) as *const i16);
        b = 0xbadf;
        // 将修改后的值写回缓冲区对应位置
        *(buffer.as_mut_ptr().add(4) as *mut i16) = b;
    }

    // 打印验证内存内容,小端平台(如x86)下会输出目标结果
    println!("buffer memory: {:x?}", buffer);
}

关键细节说明:

  • buffer.as_ptr()/buffer.as_mut_ptr():分别获取缓冲区的不可变/可变原始指针,类型为*const u8/*mut u8。
  • 指针类型转换(as *const i32/as *mut i16):必须放在unsafe块中,因为Rust无法自动验证这类转换的安全性。
  • 字节序依赖平台:这段代码的内存结果和C一样,取决于平台的字节序。在小端平台(如常见的x86架构)下,最终缓冲区内容会和你注释的de c0 ad de df ba 77 88 99 aa一致;大端平台结果会不同。

如果你想脱离平台字节序的限制,明确控制读写的字节序,可以使用byteorder crate实现安全的内存操作,无需unsafe块:

use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
use std::io::Cursor;

fn main() {
    let mut buffer: [u8; 10] = [0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa];

    // 以小端模式读取缓冲区起始的4字节为i32
    let mut a = Cursor::new(&buffer).read_i32::<LittleEndian>().unwrap();
    a = 0xdeadc0de;
    // 以小端模式将值写回缓冲区起始位置
    let mut cursor = Cursor::new(&mut buffer);
    cursor.write_i32::<LittleEndian>(a).unwrap();

    // 以小端模式读取缓冲区索引4开始的2字节为i16
    let mut cursor = Cursor::new(&buffer[4..]);
    let mut b = cursor.read_i16::<LittleEndian>().unwrap();
    b = 0xbadf;
    // 以小端模式将值写回对应位置
    let mut cursor = Cursor::new(&mut buffer[4..]);
    cursor.write_i16::<LittleEndian>(b).unwrap();

    println!("buffer memory: {:x?}", buffer);
}

内容的提问来源于stack exchange,提问作者krusty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:48:46