是否有一种现成的方法可以将Rust中的IP地址(v4和v6)从二进制转换为文本形式(等于inet_ntop
)?
示例:
"3701A8C0"
转换为"55.1.168.192"
,"20010db8000000000000000000000001"
转换为"2001:db8::1"
。AFAIK,没有直接转换,但是您可以使用from_str_radix
:
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
fn convert(s: &str) -> Result<IpAddr, ()> {
if let Ok(u) = u32::from_str_radix(s, 16) {
Ok(Ipv4Addr::from(u).into())
} else if let Ok(u) = u128::from_str_radix(s, 16) {
Ok(Ipv6Addr::from(u).into())
} else {
Err(())
}
}
fn main() {
let ip = convert("3701A8C0").unwrap();
println!("{}", ip); //55.1.168.192
let ip = convert("20010db8000000000000000000000001").unwrap();
println!("{}", ip); //2001:db8::1
}