Передача целого числа как * void в target-c/cocoa
Я пытаюсь использовать функцию DNSServiceRegister(...) как часть пакета DNS_SD, а для "хоста" требуется имя хоста в виде строки. Однако можно зарегистрировать хост по IP-адресу, но этот IP-адрес должен быть отформатирован в двоичном представлении (вместо 192.168.1.23 это будет 0x1701a8c0).
Я предполагаю, что могу обмануть функцию, передав значение 1701a8c0 напрямую, но ничего из того, что я пробовал, похоже, не работает. strncpy не возвращает ожидаемое значение, просто вставка не работает, создание NSData, а затем NSString не работает. Я мог бы написать цикл, который строит массив символов 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);
1 ответ
Чтобы зарегистрировать хост по IP-адресу, вы, вероятно, должны передать адрес в строковом представлении ASCII, например, в строке "192.168.1.23". Ты можешь использовать inet_ntoa()
или лучше getnameinfo
с флагом NI_NUMERICHOST для преобразования struct sockaddr
в строку.