@historydev
Информационный наркоман

Как передать индекс u8 в pow u32 метод?

Пытаюсь преобразовать массив байтов в число, для этого мне нужно возвести основание (256) в степень (i), но у меня конфликт типов:
let curr_num: usize = 2000;
    let mut num: usize = 0;
    
    for (b, i) in curr_num.to_le_bytes().iter().enumerate() {
        let i: u32 = u32::from(*i);
        let system: usize = 256;
        num += b * system.pow(i);
    }
    
    println!("{num}");


Пробую .into/ as u32, получаю ошибку времени выполнения:
thread 'main' panicked at /home/runner/.termux-build/rust/src/library/core/src/num/mod.rs:1281:5:   attempt to multiply with overflow                 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
@historydev Автор вопроса
Информационный наркоман
2 ошибки, перепутал порядок элементов в деструктуризации кортежа который возвращает enumerate и пытался привести из-за этого usize в u16, отсюда и ошибка #2:
let curr_num: u16 = 2000;
    let mut num: u16 = 0;
    
    for (i, b) in curr_num.to_le_bytes().iter().enumerate() {
        num += (*b as u16) * 256u16.pow(i as u32);
    }
    
    println!("{num}");
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы