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

如何在Rust中实现类似Python的字节串拼接?

Rust 中实现字节串拼接的几种方法

Rust 里不能直接用+运算符拼接&[u8]类型的字节串,这是因为&[u8]是借用的数组切片,标准库没有为其实现Add trait,所以会出现你遇到的类型不匹配错误。下面是几种符合需求的实现方式,都可以直接用于写入文件:

方法一:使用Vec<u8>动态拼接(最通用)

Vec<u8>是 Rust 标准库提供的可增长字节缓冲区,适合处理运行时动态内容的拼接,后续写入文件也非常方便:

fn main() {
    let mut data = Vec::new();
    // 依次追加字节串
    data.extend_from_slice(b"commit");
    data.extend_from_slice(b" ");
    data.extend_from_slice(b"\x00");

    // 写入文件示例
    std::fs::write("output.bin", &data).expect("写入文件失败");
    println!("{:?}", data); // 输出: [99, 111, 109, 109, 105, 116, 32, 0]
}

extend_from_slice方法可以将任意&[u8]类型的内容追加到Vec中,最终的Vec<u8>可以直接被文件写入函数接受(因为Vec<T>可以自动解引用为&[T])。

方法二:使用concat!宏编译时拼接(性能最优)

如果所有要拼接的字节串都是编译时已知的字面量,推荐用concat!宏,它会在编译阶段直接合并成一个固定大小的数组,完全没有运行时开销:

fn main() {
    // 编译时直接合并为&[u8; 8]类型的字节串
    let data = concat!(b"commit", b" ", b"\x00");

    // 写入文件示例
    std::fs::write("output.bin", data).expect("写入文件失败");
    println!("{:?}", data); // 输出: [99, 111, 109, 109, 105, 116, 32, 0]
}

方法三:使用迭代器chain拼接(适合动态序列)

如果需要拼接的是多个字节迭代器(比如部分内容是运行时生成的),可以用chain方法把迭代器串联起来,再收集到Vec<u8>中:

fn main() {
    let data: Vec<u8> = b"commit"
        .iter()
        .chain(b" ".iter())
        .chain(b"\x00".iter())
        .cloned()
        .collect();

    // 写入文件示例
    std::fs::write("output.bin", &data).expect("写入文件失败");
    println!("{:?}", data); // 输出: [99, 111, 109, 109, 105, 116, 32, 0]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:55:32