Используя этот ответ Я пытаюсь написать функцию Rust, которая преобразует 128-битное целое число в число с основанием 62.
fn encode_as_chars(mut integer: u128) {
let alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".as_bytes();
let base: u128 = 62;
let mut encoded: String;
while integer != 0 {
encoded = encoded.push(alphabet[(integer % base) as usize] as char);
integer /= base;
}
encoded;
}
Я получаю доступ к символу в алфавите с помощьюиндексировать с помощью as_bytes()
и привести байт обратно к символу, намереваясь выдвинуть символ в кодированную строку с помощью String::push
.Однако компилятор жалуется на это, возвращая ошибку
error[E0308]: mismatched types
--> src/lib.rs:7:19
|
7 | encoded = encoded.push(alphabet[(integer % base) as usize] as char);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `std::string::String`, found ()
|
= note: expected type `std::string::String`
found type `()`
Я попытался явно выделить память для символа с помощью to_owned()
:
let character: char = (alphabet[(integer % base) as usize] as char).to_owned();
encoded = encoded.push( character );
, но это вернуло ту же ошибку.
Почему байт, который был приведен к символу, не имеет правильного типа при нажатии на строку?