Можно ли записать буквальные байтовые строки со значениями больше 127 в ржавчине? - PullRequest
0 голосов
/ 27 мая 2020

Я заметил, что в Rust мы не можем использовать байтовую нотацию для значений больше 128, то есть

let x = "\x01\x17\x7f"

нормально, поскольку все символы <128, но </p>

let x = "\x01\x17\x80"

завершится ошибкой, поскольку \x80 = 128.

Есть ли способ по-прежнему записывать строковые объекты в этом формате?

1 Ответ

4 голосов
/ 27 мая 2020

Выше 127 вы входите в область Unicode и должны использовать \u{codepoint} escape-последовательность:

let x = "\u{80}";

Обратите внимание, однако, что 0x80 сам по себе не является допустимым байтом в строке UTF-8, поэтому это получается как два байта:

let x = "\u{80}";

for b in x.bytes() {
    println!("{:X}", b);
}

печатает

C2
80

Если вместо этого вам нужно значение 0x80, вы не можете использовать строку и должны использовать байтовый фрагмент:

fn main() {
    let x = b"\x80";

    for b in x {
        println!("{:X}", b);
    }
}

отпечатков

80
...