首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clap原始字节参数

Clap原始字节参数
EN

Stack Overflow用户
提问于 2022-05-06 16:58:12
回答 1查看 206关注 0票数 -1

我想在clap中使用原始字节参数。

例如,--raw $(echo -n -e 'B\x10CC\x01\xff')将为我提供以下字节数组[66, 16, 67, 67, 1, 239, 191, 189] (使用to_string_lossy().to_bytes())。

是否有一种方法可以使用clap获得确切的字节数组?

编辑

代码语言:javascript
复制
let cmd = Command::new(
        env!("CARGO_CRATE_NAME")
    ).bin_name(
        env!("CARGO_CRATE_NAME")
    ).arg(
        Arg::new("raw").long("raw").takes_value(true).allow_invalid_utf8(true)
    );
    let matches = cmd.get_matches();


    match matches.value_of_os("raw") {
        Some(s) => {
            match s.to_str() {
                Some(s3) => {
                    let v2: &[u8] = s3.as_bytes();
                    println!("OsStr(bytes):{:?}", v2);
                },
                None => {},
            }

            let s2 = s.to_string_lossy();
            println!("string_from_OsString:{}", s2);

            let v3: &[u8] = s2.as_bytes();
            println!("OsString.to_lossy(bytes):{:?}", v3);
        },
        None => {},
    }

返回输入--原始$(echo -n -e 'B\x10CC\x01\xff')

代码语言:javascript
复制
string_from_OsString:BCC�
OsString.to_lossy(bytes):[66, 16, 67, 67, 1, 239, 191, 189]

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-07 08:33:13

clap与平台无关,因此使用抽象,如OsString (这是s变量的类型)。

似乎没有一般的as_bytes()方法附加到OsString,因为并不是每个操作系统上的OsString实际上都是一个原始字节数组。

下面是关于这个主题的更多讨论:在Windows上?

因此,要解决问题,似乎有必要将兼容性缩小到特定的操作系统。在您的例子中,您似乎正在使用Unix。这很好,因为对于Unix,这样的方法确实存在

给你:

代码语言:javascript
复制
use clap::{Arg, Command};
use std::os::unix::ffi::OsStrExt;

fn main() {
    let cmd = Command::new(env!("CARGO_CRATE_NAME"))
        .bin_name(env!("CARGO_CRATE_NAME"))
        .arg(
            Arg::new("raw")
                .long("raw")
                .takes_value(true)
                .allow_invalid_utf8(true),
        );
    let matches = cmd.get_matches();

    match matches.value_of_os("raw") {
        Some(s) => {
            println!(".as_bytes(): {:?}", s.as_bytes());
        }
        None => {}
    }
}
代码语言:javascript
复制
.as_bytes(): [66, 16, 67, 67, 1, 255]

请注意,use std::os::unix::ffi::OsStrExt;将向OsString添加.as_bytes()功能,但无法在非unix系统上编译。

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

https://stackoverflow.com/questions/72145042

复制
相关文章

相似问题

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