Size: a a a

2020 December 13

A

Aragaer in Rust Beginners
источник

A

Aragaer in Rust Beginners
это на си, но суть та же
источник

d

drjackild in Rust Beginners
Хм, может я тогда вообще не в ту сторону смотрю. Мне надо получить количество бит для CIDR нотации из IpAddr. Сейчас я делаю нечто такое (пока не работает из-за необходимости конвертить в f64:
let bits: u8 = match self.net_mask {
   IpAddr::V4(addr) => addr
       .octets()
       .iter()
       .map(|i| f64::from(i).log2() as u8)
       .sum(),
   IpAddr::V6(addr) => addr
       .segments()
       .iter()
       .map(|i| f64::from(i).log2() as u8)
       .sum(),
};

есть какой-нибудь более грамотный способ это сделать?
источник

IB

Ilya Bogdanov in Rust Beginners
Если тебе нужно количество бит посчитать - то есть https://doc.rust-lang.org/std/primitive.u8.html#method.count_ones
источник

IB

Ilya Bogdanov in Rust Beginners
источник

d

drjackild in Rust Beginners
Ну и если есть идеи, как сделать обратную операцию (превратить CIDR нотацию в IpAddr) - буду тоже премного благодарен)
источник

A

Aragaer in Rust Beginners
ну там же по ссылке есть примеры для нахождения номера единственного ненулевого бита, а если у тебя маска это число вида 1111..111000...000
источник

d

drjackild in Rust Beginners
Да да, я увидел, спасибо.
источник

A

Aragaer in Rust Beginners
тогда можно сделать ему побитовый not, а потом +1 и получится число, у которого только одна единица, и ее номер это столько, сколько нулей у тебя изначально было
источник

d

drjackild in Rust Beginners
Вот это прям то, что надо, учитывая, что там всегда будут числа вида 111111111…000…
источник

d

drjackild in Rust Beginners
Спасибо всем огромное за помощь!
источник

A

Aragaer in Rust Beginners
буквально вчера с коллегой по работе решали сходную задачку, только у него были числа вида нули-потом-единицы
источник

IB

Ilya Bogdanov in Rust Beginners
Aragaer
буквально вчера с коллегой по работе решали сходную задачку, только у него были числа вида нули-потом-единицы
count_zeros тоже есть)
источник

A

Aragaer in Rust Beginners
ну у нас там с++ (хотя для битовых фокусов чистый си вполне годится)
источник

AW

Alex Wow in Rust Beginners
drjackild
Хм, может я тогда вообще не в ту сторону смотрю. Мне надо получить количество бит для CIDR нотации из IpAddr. Сейчас я делаю нечто такое (пока не работает из-за необходимости конвертить в f64:
let bits: u8 = match self.net_mask {
   IpAddr::V4(addr) => addr
       .octets()
       .iter()
       .map(|i| f64::from(i).log2() as u8)
       .sum(),
   IpAddr::V6(addr) => addr
       .segments()
       .iter()
       .map(|i| f64::from(i).log2() as u8)
       .sum(),
};

есть какой-нибудь более грамотный способ это сделать?
Лог числа по основанию 2
источник

r🍪

radmirkus 🍪 in Rust Beginners
а есть оналйн компиляторы для раста? (не чтобы запустить, а чтобы получить бинарник)
источник

/

/bin/cat in Rust Beginners
radmirkus 🍪
а есть оналйн компиляторы для раста? (не чтобы запустить, а чтобы получить бинарник)
источник

MB

Mikail Bagishov in Rust Beginners
Он бинарник не выдает
источник

/

/bin/cat in Rust Beginners
Сообщение было отредактировано
источник

MB

Mikail Bagishov in Rust Beginners
Я таких онлайн-компиляторов не только для раста, но и вообще не видел
источник