Add functions to convert IPv4 to long and back
This commit is contained in:
@@ -171,7 +171,6 @@ impl Ipv4Addr {
|
|||||||
((self.octets()[0] as u16) << 8) | self.octets()[1] as u16,
|
((self.octets()[0] as u16) << 8) | self.octets()[1] as u16,
|
||||||
((self.octets()[2] as u16) << 8) | self.octets()[3] as u16)
|
((self.octets()[2] as u16) << 8) | self.octets()[3] as u16)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
@@ -244,6 +243,21 @@ impl FromInner<libc::in_addr> for Ipv4Addr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "ip_u32", since = "1.1.0")]
|
||||||
|
impl From<Ipv4Addr> for u32 {
|
||||||
|
fn from(ip: Ipv4Addr) -> u32 {
|
||||||
|
let ip = ip.octets();
|
||||||
|
((ip[0] as u32) << 24) + ((ip[1] as u32) << 16) + ((ip[2] as u32) << 8) + (ip[3] as u32)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "ip_u32", since = "1.1.0")]
|
||||||
|
impl From<u32> for Ipv4Addr {
|
||||||
|
fn from(ip: u32) -> Ipv4Addr {
|
||||||
|
Ipv4Addr::new((ip >> 24) as u8, (ip >> 16) as u8, (ip >> 8) as u8, ip as u8)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Ipv6Addr {
|
impl Ipv6Addr {
|
||||||
/// Creates a new IPv6 address from eight 16-bit segments.
|
/// Creates a new IPv6 address from eight 16-bit segments.
|
||||||
///
|
///
|
||||||
@@ -738,4 +752,16 @@ mod tests {
|
|||||||
let a = sa4(Ipv4Addr::new(77, 88, 21, 11), 12345);
|
let a = sa4(Ipv4Addr::new(77, 88, 21, 11), 12345);
|
||||||
assert_eq!(Ok(vec![a]), tsa(a));
|
assert_eq!(Ok(vec![a]), tsa(a));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_ipv4_to_int() {
|
||||||
|
let a = Ipv4Addr::new(127, 0, 0, 1);
|
||||||
|
assert_eq!(u32::from(a), 2130706433);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_int_to_ipv4() {
|
||||||
|
let a = Ipv4Addr::new(127, 0, 0, 1);
|
||||||
|
assert_eq!(Ipv4Addr::from(2130706433), a);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user