【问题标题】:Convert an ascii string literal to &[u8] in Rust?在 Rust 中将 ascii 字符串文字转换为 &[u8]?
【发布时间】:2014-11-28 20:28:56
【问题描述】:

如何将 ascii 字符串文字(例如“123 458”)转换为 &[u8] rust 切片? Rust 有 6 个? 7?字符串类型,在它们之间转换的调用几乎没有统一性。

我希望它是这样的:

let array:&[u8] = Ascii("123 456").into_bytes().as_slice().givemetheeffingbufferalready() as &[u8];

请相信我确实需要这样做;我正在为一些文件解析器代码编写测试用例。

【问题讨论】:

  • 事实上Rust只有两种字符串类型,Stringstr
  • 我不知道你从哪里得到它有 6 或 7 个字符串类型的想法,我不知道你从哪里得到转换调用几乎没有一致性的想法;虽然仍有极少数地方并非一切都保持一致,但作为一般规则,一切都是非常一致的。 std::ascii 是剩下的少数可以进行一些返工的区域之一;这不是最好的处理方式,值得认识到Ascii单个ASCII 八位字节 的类型,而Vec<Ascii>/[Ascii] 成为“ASCII 字符串”类型,就像它一样。
  • 关于转化的命名有some rules,所以尽量统一。
  • 嗯,除了 String 和 str,你还有 C 字符串,Asii...当然你可以在其他容器中粘贴字符,如果你正在处理混合 ASCII 和二进制数据您将有很多字符串来回传输到字节数组和它们的容器。我希望在作品中有更统一的方式来进行铸造;不应该有异类命名的 to_foo() 和 from_bar() 散布在图书馆周围。
  • @Chris,感谢有关 Ascii 的说明;我最初认为它已经是一个 Ascii 字符数组,而不仅仅是一个字符。

标签: string rust


【解决方案1】:

经过大量挖掘其他相关答案,并通过编译器的夜间版本得到纠正,我发现它是微不足道的;您只需在文字中添加一个“b”:

let array:&[u8] = b"123 456";

【讨论】:

  • 顺便说一句,你原来的尝试可以重写为 `let array = "123456".as_bytes()",就这么简单:) 这不检查 asciiness,当然,它会返回 UTF- 8字节序列。如果你需要一个静态数组,字节文字是要走的路。
猜你喜欢
  • 2020-01-22
  • 1970-01-01
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 2011-01-13
  • 2016-03-02
相关资源
最近更新 更多