这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

Rust的字符串

Rust的字符串

出于内存安全的考虑,Rust将字符串分成两种类型:

  1. str字符串:固定长度,不可改变
  2. String字符串:可变长度

1 - Rust中的str字符串

Rust中的str字符串

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 字符序列。

2 - Rust中的string字符串

Rust中的string字符串

字符串编码

// 将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);