首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何返回锈蚀中的Blake2机箱的结果?

如何返回锈蚀中的Blake2机箱的结果?
EN

Stack Overflow用户
提问于 2019-08-14 14:07:34
回答 1查看 178关注 0票数 0

我正在努力使用blake2机箱获取传递的文件名的哈希。从文件中:

代码语言:javascript
复制
extern crate blake2;

use blake2::{Blake2b, Digest};
use std::env;
use std::fs;
use std::io::{self, Read};

const BUFFER_SIZE: usize = 1024;

fn print_result(sum: &[u8]) {
    for byte in sum {
        print!("{:02x}", byte);
    }
}

fn process<D: Digest + Default, R: Read>(reader: &mut R) {
    let mut sh = D::default();
    let mut buffer = [0u8; BUFFER_SIZE];
    loop {
        let n = match reader.read(&mut buffer) {
            Ok(n) => n,
            Err(_) => return,
        };
        sh.input(&buffer[..n]);
        if n == 0 || n < BUFFER_SIZE {
            break;
        }
    }
    print_result(&sh.result());
}

fn main() {
    let args = env::args();
    if args.len() > 1 {
        for path in args.skip(1) {
            if let Ok(mut file) = fs::File::open(&path) {
                process::<Blake2b, _>(&mut file);
            }
        }
    } else {
        process::<Blake2b, _>(&mut io::stdin());
    }
}
代码语言:javascript
复制
blake-test   $ cargo run hoge.txt
   Compiling blake-test v0.1.0 (/Users/hoge/blake-test)
    Finished dev [unoptimized + debuginfo] target(s) in 0.61s
     Running `target/debug/blake-test hoge.txt`
eefea9ae6b7fb678ed54e6d58d46aed9eae6d003f29419948cdb42a44a7016dee3eb566e7e95c68ac7587d5debd516a3b195eed0db84d72819e387d687fd06a6

它可以成功地打印&[u8]切片。

但是,我希望接收/返回结果,而不是打印结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-23 10:48:27

当您返回一个新创建的对象时,您必须将它作为一个拥有的值返回。

借来的引用(如&[u8] )是暂时的,不可能单独存在,它们只是数据的视图,在其他地方以拥有的形式存储。

例如,您可以在片上调用.to_vec()并返回Vec<u8>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57496355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档