出于内存安全的考虑,Rust将字符串分成两种类型:
- str字符串:固定长度,不可改变
- String字符串:可变长度
出于内存安全的考虑,Rust将字符串分成两种类型:
Rust的原始字符串类型,也称为 字符串切片。
通常以不可变借用的形式存在,既 &str
。
str 由两部分组成:
use std::slice::from_raw_parts;
use std::str::from_utf8;
let truth: &'static str = "Rust是一门优雅的语言";
let ptr = truth.as_ptr();
let len = truth.len();
assert_eq!(28, len);
let s = unsafe {
let slice = from_raw_parts(ptr, len);
from_utf8(slice)
};
assert_eq!(s, Ok(truth));
Rust 中的字符串本质上是一段有效的 UTF-8 字符序列。
// 将UTF-8序列转为字符串
let tao = std::str::from_utf8(&[0xE9u8, 0x81u8, 0x93u8]).unwrap();
assert_eq!("道", tao);
// 将16进制Unicode码位转为字符串
assert_eq!("道", String::from("\u{9053}"));
let unicode_x = 0x9053;
let utf_x_hex = 0xe98193;
let utf_x_bin = 0b111010011000000110010011;
println!("unicode_x: {:b}", unicode_x);
println!("utf_x_hex: {:b}", utf_x_hex);
println!("utf_x_bin: 0x{:x}", utf_x_bin);