rust char 类型字节大小不固定,这个我理解不了。
我理解一个类型的字节大小应该是固定的,i32 就是 4 个字节。
char 类型的大小应该也是固定的,怎么就不固定了呢?想不通啊。
1
0TSH60F7J2rVkg8t 2023-05-11 15:55:29 +08:00
拿楼主的问题 Google 一搜,都说是固定的啊。rust 的 char 是 4 字节,存储 unicode 字符的。没看到“大小不固定”的说法。不过我不懂 rust ,仅仅 只是好奇搜了下,可能结果不准。等高人回答吧。
|
2
yudoo 2023-05-11 16:03:17 +08:00
它的大小取决于 Unicode 字符的编码范围和表示所需的字节数。
|
3
simen513 2023-05-11 16:26:29 +08:00
它的字符串采用的是 UTF-8 编码,里面有一个字节代表一个字符的,比如 ASCII 编码中的字符,还有 2 个字节、4 个字节代表一个字符的,具体的看 UTF-8 编码的详情。
|
4
Leviathann 2023-05-11 16:38:11 +08:00
utf 8 不定长
|
5
gkinxin 2023-05-11 17:34:24 +08:00
char 就是 4 个字节,你应该把字符串和 char 搞混了
|
6
hronro 2023-05-11 18:02:34 +08:00
char 类型表示单个字符。更具体地说,由于“字符”在 Unicode 中没有明确定义的概念,因此 char 是“Unicode 标量值”。
Unicode 标量值包括整数范围 0 到 D7FF16 和 E00016 到 10FFFF16 。 |
7
vicence 2023-08-06 21:29:44 +08:00
https://kaisery.github.io/trpl-zh-cn/ch03-02-data-types.html ,可以看下这页面的“字符类型”介绍
|
8
swordcoming9527 2023-09-28 15:53:41 +08:00
rust 字符串的确是 utf-8 不定长,底层是 u8 序列,但是 char 就是 4 个字节,字符串转为 char 序列时,不足 4 个字节的就填充 0 呗,就像 u8 转为 u32 一样。我知道一个小细节,utf-8 中,某些特殊的符号单个 char 是无法表示的,只能在 string 中显示出来,比如 é,其中涉及到 unicode 码点相关知识,我也不甚了解,总之字符编码是极其复杂的东西,而它的复杂性来源于要包含真实世界各种自然语言字符。
|
9
810244966 2023-10-06 22:10:23 +08:00
char 本身是 4 字节,但是字符串里面被编码成 utf-8 了,utf-8 中占用 1-4 个字节不等
|