2014-01-11 3 views
-1

У меня есть NSString, который является локальным IP-адресом, и мне нужно удалить последний набор цифр на этом IP-адресе и заменить на 255. Я делаю это, чтобы создать широковещательный пакет из локальный IP-адрес.Objective C Строка Манипуляция IP-адресом

Я проверил все доступные функции манипуляции с строкой и не могу найти функцию Left, которая поможет в этой ситуации.

В основном я хочу сделать это: -

Преобразовать 192.168.1.10 до 192.168.1.255

Edit: Обратите внимание на следующую информацию для вычисления широковещательного адреса для сети. Он вычисляется путем выполнения побитового ИЛИ с IP-адресом и перевернутой маской сети. Вы можете увидеть здесь калькулятор - http://www.subnet-calculator.com/

Также фактический код о том, как рассчитать широковещательный адрес можно найти здесь - Calculating the Broadcast Address in Objective-C

Это было добавлено, чтобы избежать путаницы, создаваемой с моим вопросом.

+0

Wow! Некоторые из вас, ребята, жесткие (или, возможно, просто злые). Не могу поверить, что у меня есть голосующий голос за этот вопрос. Я сделал свое исследование, это было недоступно ни в одном из предыдущих сообщений или в Интернете. И посмотрите на ответ, это было не так просто! Этот вопрос обязательно поможет другим в будущем. И проверьте этот гораздо более простой вопрос о тех же типах, он имеет 79 upvotes - http://stackoverflow.com/questions/1082178/objective-c-remove-last-character-from-string?lq = 1 – Remixed123

ответ

2
NSScanner* scanner = [NSScanner scannerWithString:idAddress]; 
[scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"."]]; 
int a, b, c; 
[scanner scanInt:&a]; 
[scanner scanInt:&b]; 
[scanner scanInt:&c]; 
NSString* result = [NSString stringWithFormat:@"%d.%d.%d.255", a, b, c]; 
+1

Но замена последнего номера на 255 работает только для сетевой маски '255.255.255.0'. Нормальный, вам нужно использовать побитовое ИЛИ IP с инвертированной маской сети, чтобы получить IP-адрес. - Cy-4AH 11 минут назад –

+0

Не то, что я принял во внимание или испытал. Так что спасибо, я посмотрю на это! – Remixed123

0

вы можете использовать метод substringToIndex на NSSring объекте, как они сделали here

, а затем добавить строку или использовать NSStringWithFormat, чтобы создать новый один

1

NSString имеет -componentsSeparatedByString: которые вы могли бы использовать, чтобы отделить строка в массив (если вы укажете @ "." в качестве строки), измените массив, а затем верните их вместе с компонентами NSArrayJoinedByString:

Или вы можете использовать опции NSString -rangeOfString: @ ".": NSBackw ardsSearch, чтобы найти, где находится последний «.», а затем выровняйте строку с помощью substringToIndex: и добавьте ваш «255».

Или вы могли бы использовать -stringByReplacingOccurrencesOfString NSString в: (NSString *) цель withString: (NSString *) варианты замены: (NSStringCompareOptions) варианты в диапазоне: (NSRange) searchRange и указать, что вы делаете RegEx, но это было бы быть сложнее.

2

Getting index of a character in NSString with offset & using substring in Objective-C показывает вам, как найти диапазон строк в другой строке, включая опцию обратного поиска. Используя это, найдите диапазон @"." (с опцией NSBackwardsSearch) по вашему IP-адресу ipaddr.

Предполагая, что вы получили диапазон в переменную с именем range, range.location является то, что вам нужно, но range.length не является (это 1, длина @ «»), так что исправить: range.length = [ipaddr.length] - range.location;.

Наконец, использовать этот диапазон для выполнения замены: maskAddress = [ipaddress stringByReplacingCharactersInRange:range withString:@".255"];

Теперь maskAddr содержит замену вы описали.

+0

Я просто прочитал ваш профайл. Извиняюсь, я знаю, что вы приложили много усилий в ответ. Но в конце концов, как кодер, который учится смотреть и анализирует код, ничто не сравнится с кодом. Мы все учимся по-другому, и я программирую более 30 лет, поэтому концептуально я вряд ли узнаю что-то новое, но синтаксис и подходы к разным языкам, ну, это другое. Я получил предварительное голосование :-) – Remixed123

Смежные вопросы