在Rust中如何将ASCII字符串文字转换为&[u8]?

23
如何将ASCII字符串字面值(例如“123 458”)转换为Rust中的&[u8]切片? Rust有6个还是7个字符串类型,几乎没有一致性可言,无法统一它们之间的转换方法。我期望的方法大致如下:
let array:&[u8] = Ascii("123 456").into_bytes().as_slice().givemetheeffingbufferalready() as &[u8];
请相信我确实需要这样做;我正在编写一些文件解析器代码的测试用例。

2
实际上,Rust 只有两种字符串类型,Stringstr - Vladimir Matveev
3
我不知道你是从哪里得到的六七种字符串类型的想法,也不知道你是从哪里得到的几乎没有一致性转换调用的想法;虽然仍有极少数地方尚未完全统一,但总的来说所有东西都非常一致。std::ascii 是为数不多需要重新调整的领域之一;它不是最易于使用的东西,值得注意的是Ascii是一个单个ASCII八位字节的类型,而Vec<Ascii>/[Ascii]成为所谓的“ASCII字符串”类型。 - Chris Morgan
1
关于类型转换的命名有一些规则,因此我们尽可能地遵循统一标准。 - huon
1
除了String和str之外,您还有C字符串、Asii...当然,您也可以将字符放入其他容器中,如果您正在处理混合ASCII和二进制数据的文件格式,则需要大量来回转换字符串和字节数组以及它们的容器。我希望在工作中有一种更统一的转换方式;库中不应该散布着异构命名的to_foo()和from_bar()。 - Andrew Wagner
@Chris,感谢你提醒我关于Ascii的事情;我最初认为它已经是Ascii字符数组而不仅仅是单个字符。 - Andrew Wagner
@dbaupp,谢谢你提供的链接;这可能会帮助我在未来更快地进行转换! - Andrew Wagner
1个回答

34
经过查阅相关答案和得到编译器夜间版本的纠正后,我发现这很简单;你只需在字面量中加入'b'即可:
let array:&[u8] = b"123 456";

23
顺便提一下,你最初的尝试可以重写为 let array = "123456".as_bytes(),很简单 :) 当然,这不会检查是否为ASCII字符,它将返回UTF-8字节序列。如果你需要一个静态数组,使用字节字面量就可以了。 - Vladimir Matveev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接