Rust 如何使用标准存储图像?

Rust 如何使用标准存储图像?,rust,Rust,在我的终端命令中,adb shell screencap-p | sed's/\r$/'>screen.png如果可以,请保存我的android屏幕 我知道可以使用adb pull,但我想知道如何使用标准方式将图像保存在锈迹中?所以,我试试这个代码,买不开图片。编码可能有问题,但我不知道如何解决 let output = Command::new("adb") .arg("shell") .arg("screencap -p")

在我的终端命令中,
adb shell screencap-p | sed's/\r$/'>screen.png
如果可以,请保存我的android屏幕

我知道可以使用
adb pull
,但我想知道如何使用标准方式将图像保存在锈迹中?所以,我试试这个代码,买不开图片。编码可能有问题,但我不知道如何解决

    let output = Command::new("adb")
            .arg("shell")
            .arg("screencap -p")
            .output()
            .expect("failed to execute process");

    let byte_string = String::from_utf8_lossy(&output.stdout).replace("\r\n","\n");


    let byte_string = String::from_utf8_lossy(&output.stdout);
    let mut buffer = File::create("foo.png")?;

    buffer.write(&byte_string.as_bytes())?;

图像数据是二进制的,而不是Unicode字符串。因此,您需要打印
和[u8]
,而不是UTF-8
字符串

let out = std::io::stdout();
out.write_all(slice)?;
out.flush()?;
flush
是必要的,因为紧跟在程序退出之后的
write_all
无法将字节传递到底层文件描述符


由于rust没有对u8数组进行字符串处理,因此您需要通过迭代字节并检查当前字节是否为\r,下一个是否为\n来手动撤消adb损坏,然后跳过当前字节。

请将您的问题包含在您得到的错误中。OP将如何执行他们希望替换的
\r
make?它似乎跳过了最后一个字节