我有一个字符串格式的 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)
我的问题:我怎样才能做到与此完全相反?
该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)