Add int to IP conversion
This commit is contained in:
parent
ad3635822d
commit
eb582e2f3d
1 changed files with 30 additions and 6 deletions
36
src/main.rs
36
src/main.rs
|
@ -8,7 +8,15 @@ fn main() {
|
||||||
|
|
||||||
let ip_string = &args[1];
|
let ip_string = &args[1];
|
||||||
|
|
||||||
println!("Result: \n{}", ip_to_int(ip_string));
|
println!(
|
||||||
|
"Result: \n{}",
|
||||||
|
match ip_string.parse::<u32>() {
|
||||||
|
Ok(x) => {
|
||||||
|
int_to_ip(x)
|
||||||
|
}
|
||||||
|
Err(_) => ip_to_int(ip_string).to_string(),
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ip_to_int(ip_string: &str) -> u32 {
|
fn ip_to_int(ip_string: &str) -> u32 {
|
||||||
|
@ -21,18 +29,34 @@ fn ip_to_int(ip_string: &str) -> u32 {
|
||||||
let mut ip_address: u32 = 0;
|
let mut ip_address: u32 = 0;
|
||||||
|
|
||||||
for i in 0..4 {
|
for i in 0..4 {
|
||||||
let octet: u32 = ip_octets.get(i).unwrap_or(&"0").parse().expect("Not a number.");
|
let octet: u32 = ip_octets
|
||||||
|
.get(i)
|
||||||
|
.unwrap_or(&"0")
|
||||||
|
.parse()
|
||||||
|
.expect("Not a number.");
|
||||||
|
|
||||||
if octet > 254 {
|
if octet > 254 {
|
||||||
panic!("Invalid octet: {}", octet);
|
panic!("Invalid octet: {}", octet);
|
||||||
}
|
}
|
||||||
|
|
||||||
ip_address = (ip_address << 8) + octet;
|
ip_address = (ip_address << 8) + octet;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ip_address;
|
return ip_address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn int_to_ip(ip_int: u32) -> String {
|
||||||
|
let mut ip_str = String::new();
|
||||||
|
for i in 0..4 {
|
||||||
|
let octet = (ip_int >> i * 8) & 0xff;
|
||||||
|
ip_str.insert_str(0, &format!(".{}", octet));
|
||||||
|
}
|
||||||
|
|
||||||
|
ip_str.remove(0);
|
||||||
|
|
||||||
|
ip_str
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::ip_to_int;
|
use super::ip_to_int;
|
||||||
|
|
Loading…
Reference in a new issue