我正在尝试将 DNSServiceRegister(...) 函数用作 DNS_SD 包的一部分,对于“主机”,它需要一个主机名作为字符串。但是,可以通过 IP 地址注册主机,但 IP 地址必须以二进制表示形式格式化(而不是 192.168.1.23,它将是 0x1701a8c0)。
我假设我可以通过直接传入值 1701a8c0 来欺骗函数,但我尝试过的任何方法似乎都不起作用。strncpy 不返回预期值,只是粘贴它不起作用,创建一个 NSData 然后一个 NSString 不起作用。我可以编写一个循环,一次构建 char 数组 1 个条目,但必须有另一种方法吗?
struct sockaddr_in sa;
...
ipBinary=[[NSData alloc] initWithBytes:&(sa.sin_addr.s_addr) length:8];
ipBinStr=[[NSString alloc] initWithData:ipBinary encoding:NSUTF8StringEncoding];
我也无法对此进行任何变体:
strncpy(str,(char *)&(sa.sin_addr.s_addr),8);