一种字符类型。
char
类型表示单个字符。更具体地说,由于 'character' 在 Unicode 中不是一个定义明确的概念,所以 char
是一个“Unicode 标量值”,它类似于但不同于“Unicode 代码点”。
本文档说明了 char
类型的许多方法和特征实现。出于技术原因,std::char 模块中还有其他单独的文档。
表示
char
的大小始终为四个字节。这是与给定字符作为 String
一部分的不同表示形式。例如:
let v = vec!['h', 'e', 'l', 'l', 'o'];
// five elements times four bytes for each element
assert_eq!(20, v.len() * std::mem::size_of::<char>());
let s = String::from("hello");
// five elements times one byte per element
assert_eq!(5, s.len() * std::mem::size_of::<u8>());
与往常一样,请记住,'character' 的人类直觉可能不会映射到 Unicode 的定义。例如,尽管看起来相似,但 'é' 字符是一个 Unicode 代码点,而 'é' 是两个 Unicode 代码点:
let mut chars = "é".chars();
// U+00e9:'latin small letter e with acute'
assert_eq!(Some('\u{00e9}'), chars.next());
assert_eq!(None, chars.next());
let mut chars = "é".chars();
// U+0065:'latin small letter e'
assert_eq!(Some('\u{0065}'), chars.next());
// U+0301:'combining acute accent'
assert_eq!(Some('\u{0301}'), chars.next());
assert_eq!(None, chars.next());
这意味着上面第一个字符串的内容将适合char
而第二个字符串的内容将不会.试图创建一个char
带有第二个字符串内容的文字会产生错误:
error:character literal may only contain one codepoint:'é'
let c = 'é';
^^^
char
的 4 字节固定大小的另一个含义是每个 char
处理最终可能会使用更多内存:
let s = String::from("love:❤️");
let v:Vec<char> = s.chars().collect();
assert_eq!(12, std::mem::size_of_val(&s[..]));
assert_eq!(32, std::mem::size_of_val(&v[..]));
相关用法
- Rust char.is_control用法及代码示例
- Rust char.is_alphanumeric用法及代码示例
- Rust char.len_utf16用法及代码示例
- Rust char.is_digit用法及代码示例
- Rust char.is_ascii_graphic用法及代码示例
- Rust char.is_ascii_alphabetic用法及代码示例
- Rust char.decode_utf16用法及代码示例
- Rust char.is_uppercase用法及代码示例
- Rust char.to_ascii_lowercase用法及代码示例
- Rust char.is_ascii_uppercase用法及代码示例
- Rust char.from_u32用法及代码示例
- Rust char.encode_utf16用法及代码示例
- Rust char.escape_unicode用法及代码示例
- Rust char.is_alphabetic用法及代码示例
- Rust char.is_ascii_control用法及代码示例
- Rust char.from_u32_unchecked用法及代码示例
- Rust char.eq_ignore_ascii_case用法及代码示例
- Rust char.is_ascii_whitespace用法及代码示例
- Rust char.make_ascii_uppercase用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Primitive Type char。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。