V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yujianwjj
V2EX  ›  Rust

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

  •  
  •   yujianwjj · 2023-05-11 15:47:19 +08:00 · 1703 次点击
    这是一个创建于 563 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    Unicode 标量值包括整数范围 0 到 D7FF16 和 E00016 到 10FFFF16 。
    vicence
        7
    vicence  
       2023-08-06 21:29:44 +08:00
    https://kaisery.github.io/trpl-zh-cn/ch03-02-data-types.html ,可以看下这页面的“字符类型”介绍
    swordcoming9527
        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 码点相关知识,我也不甚了解,总之字符编码是极其复杂的东西,而它的复杂性来源于要包含真实世界各种自然语言字符。
    810244966
        9
    810244966  
       2023-10-06 22:10:23 +08:00
    char 本身是 4 字节,但是字符串里面被编码成 utf-8 了,utf-8 中占用 1-4 个字节不等
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3616 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:52 · PVG 12:52 · LAX 20:52 · JFK 23:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.