Прежде всего: в Русте char
является уникальным интегральным значением, представляющим значения Unicode Скалярного. Например, рассмотрим (иначе куча Poo, он же U + 1F4A9), в Rust будет представлен char
со значением 128169
в десятичной системе (т.е. в шестнадцатеричном 0x1F4A9
):
fn main() {
let c: char = "".chars().next().unwrap();
println!(" is {} ({})", c, c as u32);
}
On the playpen.
С учетом этого, ржавчина char
составляет 4 байта, поскольку 4 байта - это наименьшая мощность 2 байтов, которые могут удерживать интегральное значение любого значения Scicar Unicode. Решение было обусловлено доменом, а не архитектурными ограничениями.
Примечание: акцент на значении скаляра является то, что число «героев», как мы видим их на самом деле графемы состоит из нескольких несамостоятельных символов в Unicode, в этом случае множественного char
требуется.
Обратите внимание, что 'char' не хранит кодовую точку UTF-8. 'char' на самом деле является точкой кода UTF-32, то есть просто сканирующим значением Unicode. –
Я действительно видел это поведение, смотря на выравнивание структуры, я думал, в магазинах char, только ASCII, но я вижу, что нет –
тем более удивительно, что в этом свете представлены предложенные здесь теории: https: //doc.rust-lang .org/std/primitive.char.html, а именно: «Как всегда, помните, что человеческая интуиция для« персонажа »может не отображаться в определениях Unicode. Например, символы emoji, такие как« ❤️ », могут быть более одного Unicode кодовая точка, в частности, это два: «<- В UTF-32 у вас есть только 1 кодовая точка для всего ... – BitTickler