初学者关于 rust char 类型大小的疑问?

2023-05-11 15:47:19 +08:00
 yujianwjj

rust char 类型字节大小不固定,这个我理解不了。

我理解一个类型的字节大小应该是固定的,i32 就是 4 个字节。

char 类型的大小应该也是固定的,怎么就不固定了呢?想不通啊。

1731 次点击
所在节点    Rust
9 条回复
0TSH60F7J2rVkg8t
2023-05-11 15:55:29 +08:00
拿楼主的问题 Google 一搜,都说是固定的啊。rust 的 char 是 4 字节,存储 unicode 字符的。没看到“大小不固定”的说法。不过我不懂 rust ,仅仅 只是好奇搜了下,可能结果不准。等高人回答吧。
yudoo
2023-05-11 16:03:17 +08:00
它的大小取决于 Unicode 字符的编码范围和表示所需的字节数。
simen513
2023-05-11 16:26:29 +08:00
它的字符串采用的是 UTF-8 编码,里面有一个字节代表一个字符的,比如 ASCII 编码中的字符,还有 2 个字节、4 个字节代表一个字符的,具体的看 UTF-8 编码的详情。
Leviathann
2023-05-11 16:38:11 +08:00
utf 8 不定长
gkinxin
2023-05-11 17:34:24 +08:00
char 就是 4 个字节,你应该把字符串和 char 搞混了
hronro
2023-05-11 18:02:34 +08:00
char 类型表示单个字符。更具体地说,由于“字符”在 Unicode 中没有明确定义的概念,因此 char 是“Unicode 标量值”。

Unicode 标量值包括整数范围 0 到 D7FF16 和 E00016 到 10FFFF16 。
vicence
2023-08-06 21:29:44 +08:00
https://kaisery.github.io/trpl-zh-cn/ch03-02-data-types.html ,可以看下这页面的“字符类型”介绍
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 码点相关知识,我也不甚了解,总之字符编码是极其复杂的东西,而它的复杂性来源于要包含真实世界各种自然语言字符。
810244966
2023-10-06 22:10:23 +08:00
char 本身是 4 字节,但是字符串里面被编码成 utf-8 了,utf-8 中占用 1-4 个字节不等

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/939233

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX