如何获得char的unicode值?

Aur*_*ier 3 rust

我想得到汉字的Unicode值.它可能看起来像let values: &[u16] = f("???");

当我使用时,"?".as_bytes()我得到了[227, 129, 174].

当我使用'?'.escape_unicode()'\u306e'0x306e正是我想要的.

Sve*_*ach 9

char类型可以u32使用as.这条线

println!("{:x}", '?' as u32);
Run Code Online (Sandbox Code Playgroud)

将打印"306e"({:x}用于将数字格式化为十六进制).

如果您确定所有的角色都在BMP中,理论上您也可以直接投入u16.对于来自补充平面的角色,这会默默地给出错误的结果,例如'' as u16返回0xf756而不是正确的0x1f756,所以你需要有充分的理由去做.

在内部,a char存储为32位数字,因此c as u32对于某些字符,c仅将字符的内存表示重新解释为u32.

  • 我甚至会说"根本不要使用'u16`!" 这只是误导和不必要的"优化".但值得称赞并表明`as u16`默默地从代码点的高16位下降.这是很好的信息,并且很好地研究.我建议将它更多地称为"不要这样做",因为你可能知道你的角色今天都在BMP中,但明天他们可能不会. (5认同)