use std::{net::Ipv4Addr, str::FromStr};
pub fn inet_aton(ip_addr: &str) -> u32 {
let from_str = Ipv4Addr::from_str(ip_addr).unwrap();
let octets = from_str.octets();
(octets[0] as u32) * (1 << 24)
+ (octets[1] as u32) * (1 << 16)
+ (octets[2] as u32) * (1 << 8)
+ (octets[3] as u32)
}
pub fn inet_ntoa(ip_addr: u32) -> String {
let i_24 = 1 << 24;
let i_16 = 1 << 16;
let i_8 = 1 << 8;
let a = ip_addr / i_24;
let b = (ip_addr - a * i_24) / i_16;
let c = (ip_addr - a * i_24 - b * i_16) / i_8;
let d = ip_addr - a * i_24 - b * i_16 - c * i_8;
format!("{a}.{b}.{c}.{d}")
}
#[test]
fn test() -> Result<(), String> {
let inet_aton = inet_aton("255.255.255.255");
println!("{inet_aton}");
let inet_aton = inet_ntoa(inet_aton);
println!("{inet_aton}");
Ok(())
}