我是一名 Rust 初学者。我想创建一个可变的 u8 缓冲区。
我尝试了以下代码:
let mut str = "hello";
let r = str as *mut u8;
但是我遇到了问题
error[E0606]: casting `&str` as `*mut u8` is invalid
我希望了解如何做,也想知道为什么。 "hello" 是什么类型?Rust中的强制转换是如何工作的?
我是一名 Rust 初学者。我想创建一个可变的 u8 缓冲区。
我尝试了以下代码:
let mut str = "hello";
let r = str as *mut u8;
但是我遇到了问题
error[E0606]: casting `&str` as `*mut u8` is invalid
我希望了解如何做,也想知道为什么。 "hello" 是什么类型?Rust中的强制转换是如何工作的?
&str
类型(字符串切片)。
第三:你可以通过调用as_bytes()将&str
转换为&[u8]
,这就是你所需的缓冲区。在变量名前添加mut
使其可变。 let str = "hello";
let mut r = str.as_bytes();
println!("{:?}", r);
as_bytes
返回一个可变的u8指针?但是如果我想创建自己的可变u8指针呢?我该如何填充它? - Guerlando OCsr
的类型是 &[u8]
。 - Guerlando OCs有一个方法 str::as_mut_ptr
可以完全实现这个功能。
let mut str = "hello";
let r = str.as_mut_ptr(); // r: *mut u8
然而,如果您选择使用r
,则需要负责维护str
的安全不变性。引用文档(重点在我这里):
将可变字符串切片转换为原始指针。
由于字符串切片是字节的切片,原始指针指向一个
u8
。 此指针将指向字符串切片的第一个字节。您有责任确保字符串切片只以一种使其仍然有效的UTF-8格式进行修改。
u8
是一个原始类型,Vec如何创建它们的缓冲区呢?这就是我不明白的地方,也在教程中找不到答案。 - Guerlando OCs&Vec[..]
上使用as_slice
方法。 - Ikechukwu Eze*mut u8
指针做什么?提供一个答案会有帮助。 - ramslök