Преобразование [адреса NSNetservice] к строке IP-адреса

Этот вопрос уже задали здесь: IP-адрес NSNetservice

и здесь: iPhone: Добрый день IP-адрес NSNetService и порт

Я использовал обоих из тех для получения, где я в теперь. Моей проблемой является следующий метод, который я имею, не вполне работает:

- (NSString *)getStringFromAddressData:(NSData *)dataIn {
    struct sockaddr_in  *socketAddress = nil;
    NSString            *ipString = nil;

    socketAddress = (struct sockaddr_in *)[dataIn bytes];
    ipString = [NSString stringWithFormat: @"%s",
                inet_ntoa(socketAddress->sin_addr)];  ///problem here
    return ipString;
}

Это дает ошибку сборки, говоря и "Разыменовывая указатель на неполный тип" и "Неявное объявление функции 'inet_ntoa'" на той же строке.

Я проверил, и я не думаю, что пропускаю некоторый тип платформы для получения inet_ntoa работать. Какая-либо идея, что я делаю неправильно?спасибо.

7
задан Community 23 May 2017 в 12:01
поделиться

1 ответ

Вы также можете сделать это с помощью формата boost::, который, как я нахожу, часто сохраняет ввод:

std::cout << boost::format("%08x\n") % 0xe8a00;

Это также позволяет для некоторых хорошо код повторного использования, если у вас есть несколько мест вы должны сделать одно и то же форматирование:

boost::format hex08("%08x");
std::cout << hex08 % 0xe8aa << std::endl;
-121--4716194-

Это также относится к дубликатам (возвращает одну строку для каждого user_id):

SELECT *
FROM (
  SELECT u.*, FIRST_VALUE(u.rowid) OVER(PARTITION BY u.user_id ORDER BY u.date DESC) AS last_rowid
  FROM users u
) u2
WHERE u2.rowid = u2.last_rowid
-121--1789548-

Если вы получаете неявное объявление inet_ntoa, вам, вероятно, потребуется

 #include <arpa/inet.h>

(Для получения этой информации и более подробной информации об этой функции вы можете обратиться к человеку inet_ntoa)

19
ответ дан 6 December 2019 в 08:14
поделиться