gpt4 book ai didi

rust - 将位数转换为32位整数

转载 作者:行者123 更新时间:2023-12-03 11:42:27 25 4
gpt4 key购买 nike

我需要转换位数,从CIDR表示法转换为实际的子网掩码。例如192.168.0.1/30。这是30-网络掩码中设置的位数(在此示例中为255.255.255.252)。我通过将位数转换为实际字符串,然后使用u32::from_str_radix方法来获取实际数字(由于实现了Ipv4Addr特性,因此可以用于From<u32>结构)来实现此目的。这是代码:

let bit_length = 30
let bits = format!("{:0<32}", "1".repeat(bit_length as usize));
net_mask = IpAddr::V4(u32::from_str_radix(bits.as_str().into(), 2)?.into());
我想知道还有另一种方法,也许更优雅,当我们知道目标数的大小(在此示例中为32位)时,将位数转换为整数吗?也许有些我不知道的魔力?

最佳答案

如果您希望前30位为1,则意味着后2位应为0。因此,我们可以得到一个数字,其中每个位均为1,方法是按位取非0,然后将其左移两位以使两个0。

let bit_length = 30;
let bits: u32 = (!0) << (32 - bit_length);
let net_mask = IpAddr::V4(bits.into());
println!("{:?}", net_mask);
Playground link

关于rust - 将位数转换为32位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65315970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com