将 IP 地址转换为二进制 (UInt32)

Joh*_*ith 0 ios swift

我有一个字符串格式的 IP 地址,所以"192.168.0.1".

我想将此字符串转换为二进制/位版本,以便我摆脱Uint32它。在这种情况下16820416

我在网上找到了多个教程,如何将位版本转换为字符串,如下所示:

let ipAddress = 16820416

public var ipAddressString: String {
    var bytes = [UInt32]()
    bytes.append(self.ipAddress & 0xFF)
    bytes.append((self.ipAddress >> 8) & 0xFF)
    bytes.append((self.ipAddress >> 16) & 0xFF)
    bytes.append((self.ipAddress >> 24) & 0xFF)

    return "\(bytes[0]).\(bytes[1]).\(bytes[2]).\(bytes[3])" //192.168.0.1
}
Run Code Online (Sandbox Code Playgroud)

我的问题:我怎样才能做到与此完全相反?

Mar*_*n R 5

inet_pton()功能...

... 将表示格式地址(即保存在字符串中的可打印形式)转换为网络格式(通常是 struct in_addr 或一些其他内部二进制表示,以网络字节顺序)。

例子:

let addrString = "192.168.0.1"
var addr = in_addr()
if inet_pton(AF_INET, addrString, &addr) == 1 {
    let ipAddress = addr.s_addr

    print(ipAddress) // 16820416
    print(String(format:"%#08x", ipAddress)) // 0x100a8c0
} else {
    print("invalid address")
}
Run Code Online (Sandbox Code Playgroud)

所有套接字地址结构都使用“网络字节顺序”(= big-endian)。如果您想要主机字节顺序(= little-endian)中的 IP 地址,请使用

    let ipAddress = UInt32(bigEndian: addr.s_addr)

    print(ipAddress) // 3232235521
    print(String(format:"%#08x", ipAddress)) // 0xc0a80001
Run Code Online (Sandbox Code Playgroud)