相当于Rust中inet_ntop

问题描述 投票:1回答:1

是否有一种现成的方法可以将Rust中的IP地址(v4和v6)从二进制转换为文本形式(等于inet_ntop)?

示例:

  • ["3701A8C0"转换为"55.1.168.192"
  • ["20010db8000000000000000000000001"转换为"2001:db8::1"
rust ip-address converters
1个回答
0
投票

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
}
© www.soinside.com 2019 - 2024. All rights reserved.