为什么Rust中的`char`大小为4个字节?

时间:2016-04-03 02:31:37

标签: rust

此代码显示char占用4个字节:

println!("char : {}", std::mem::size_of::<char>());
  1. 为什么需要4个字节?
  2. 大小取决于平台,还是总是4个字节?
  3. 如果它总是4个字节,那是特殊的东西吗?
  4. 编译器是否保证char
  5. 大小的最小大小

    https://play.rust-lang.org/我也得到4个字节

3 个答案:

答案 0 :(得分:10)

首先:Rust中的char是表示Unicode标量值的唯一整数值​​。例如,考虑(又名桩的Poo,又名U + 1F4A9),在Rust中,它将由char表示,其值为128169十进制(即{{ 1}}十六进制):

0x1F4A9

On the playpen

如上所述,Rust fn main() { let c: char = "".chars().next().unwrap(); println!(" is {} ({})", c, c as u32); } 是4个字节,因为4个字节是2个字节的最小幂,它可以保存任何Unicode标量值的整数值。该决定是由域驱动的,而不是由架构约束驱动的。

注意:对标量值的强调是许多&#34;字符&#34;我们看到它们实际上是由Unicode中的多个组合字符组成的字形,在这种情况下需要多个char

答案 1 :(得分:3)

$('#div1').removeClass(); $('#div1').addClass(happy); 是四个字节。 总是四个字节,它总是 四个字节。它是四个字节,剩下四个字节。

它没有什么特别之处;四个字节只是两个中最小的幂,您可以在其中存储任何Unicode标量值。其他各种语言都做同样的事情。

答案 2 :(得分:2)

字符是四个字节,不依赖于体系结构。

为什么呢?根据UTF-8维基百科的文章。

  

前128个字符(US-ASCII)需要一个字节。接下来的1,920   字符需要两个字节来编码。需要三个字节   基本多语言平面的其余部分中包含的字符   几乎所有常用字符。需要四个字节   Unicode的其他平面中的字符。

因此,如果您想表示任何可能的 Unicode字符,编译器必须保存4个字节。

您还应该考虑字节对齐:http://www.eventhelix.com/realtimemantra/ByteAlignmentAndOrdering.htm