powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / IP adress из стринга в byte[] ?
25 сообщений из 25, страница 1 из 1
IP adress из стринга в byte[] ?
    #34521266
Zeleboba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно получать из стринга типа 192.134.123.121 ип адреc виде byte[]. Не охота парсить самому , но метода который такое далает я почемуто не нашел даже в таких классах как InetAdress(он то мне кстати и нужен в итоге, но у него нет конструктора для String, только для byte[]) и Socket. Если кто знает что можно для этих целей использовать подскажите плз.
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521286
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ну не ёмаё! Чё тут парсить то? Я думал я самый ленивый программист

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
		 int  i =  0 ;
		 byte [] ip =  new   byte [ 4 ];
		String sip = "192.134.123.121";
		 while  (sip.indexOf('.') >=  0 ){
			ip[i] = ( byte )(Integer.parseInt(sip.substring( 0 , sip.indexOf('.'))) -  127 );
			sip = sip.substring(sip.indexOf('.') +  1 );
			System.out.println(ip[i]);
			i++;
		}
		ip[i] = ( byte )(Integer.parseInt(sip) -  127 );
		System.out.println(ip[i]);

Код: plaintext
Meo voto
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521289
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сори, 127 необходимо воспринимать как 128:)

Код: plaintext
Meo voto
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521291
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По хорошему надо бы регулярное выражение. Но у меня книжки сейчас нет, а так я их не помню, ибо в джаве с ними не работал нифига.

Код: plaintext
Meo voto
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521293
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пожалуй сей способ самый сложный :) можно попроще:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
String ip = "192.168.10.250";
String[] numbers = ip.split(".");
 byte [] n =  new   byte [numbers.length];                     // результат
 for ( int  i= 0 ; i<numbers.length; i++) {
      try  {
           n[i] = ( byte )Integer.parseInt(numbers[i]);
     }  catch (NumberFormatException e) {
     }
}
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521295
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinПо хорошему надо бы регулярное выражение.

такое подойдет?

Код: plaintext
1.
^([\d]{ 1 , 3 })\.([\d]{ 1 , 3 }).([\d]{ 1 , 3 }).([\d]{ 1 , 3 })$

ну а потом по группам извлекать
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521307
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirageпожалуй сей способ самый сложный :) можно попроще:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
String ip = "192.168.10.250";
String[] numbers = ip.split(".");
 byte [] n =  new   byte [numbers.length];                     // результат
 for ( int  i= 0 ; i<numbers.length; i++) {
      try  {
           n[i] = ( byte )Integer.parseInt(numbers[i]);
     }  catch (NumberFormatException e) {
     }
}

Ох! Точно! Я то думал у меня совсем ум за разум сс скриптовыми языками зашёл. Долго пялился в джава док на предмет сплита. А джава док был по 1.3. Вот я и решил на всякий пожарный написать так как написал=)

Про регулярное выражение не знаю.
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521350
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://java.sun.com/j2se/1.4.2/docs/api/java/net/Inet4Address.html#getAddress()
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521422
Zeleboba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо!
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521519
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirageпожалуй сей способ самый сложный :) можно попроще:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
String ip = "192.168.10.250";
String[] numbers = ip.split(".");
 byte [] n =  new   byte [numbers.length];                     // результат
 for ( int  i= 0 ; i<numbers.length; i++) {
      try  {
           n = ( byte )Integer.parseInt(numbers[i]);
     }  catch (NumberFormatException e) {
     }
}

А разве вот тут (byte)Integer.parseInt(numbers [i]) не надо 128 отнимать? byte ведь в джаве от -128 до 127
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521611
i23m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
действительно, в char надо засовывать или в String
и, по-моему, "." в split зарезервирована. поэтому ее надо на что-то заменить

String ip = "192.1 68.10.250";
String[] numbers = ip.replace('.', 'x').split("x");
char[] n = new char[numbers.length];
for(int i=0; i<numbers.length; i++) {
try {
n = (char)Integer.parseInt(numbers);
} catch(NumberFormatException e) {
}
}
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521619
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i23mдействительно, в char надо засовывать или в String
и, по-моему, "." в split зарезервирована. поэтому ее надо на что-то заменить


че за бред, надо просто заэкранировать точку в регэкспе...
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521632
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InetAddress ia= Inet4Address.getByName("192.134.123.121");
byte[] buf = ia.getAddress();
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521668
Zeleboba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, похоже ето самый подходящий вариант, почему то в апи где я смотрел не было написано что в getByName можно передавать строковое представление ип. Спасибо.
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521770
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonInetAddress ia= Inet4Address.getByName("192.134.123.121");
byte[] buf = ia.getAddress();
Нда... А мы тут выпендривались...
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521898
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonInetAddress ia= Inet4Address.getByName("192.134.123.121");
byte[] buf = ia.getAddress();

возвратит [-64, -122, 123, 121]
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521902
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё верно. В Java значение байта варьируется от -128 до 127. Чтобы получить unsigned представление байта выполните добавление 256 для отрицательных чисел массива.

И еще раз... учите матчасть.
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34521922
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВсё верно. В Java значение байта варьируется от -128 до 127. Чтобы получить unsigned представление байта выполните добавление 256 для отрицательных чисел массива.

И еще раз... учите матчасть.

Спасибо за пожелание :) Наверное Вы в прошлой жизни были Лениным?
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34522034
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZelebobaДа, похоже ето самый подходящий вариант, почему то в апи где я смотрел не было написано что в getByName можно передавать строковое представление ип. Спасибо.
http://java.sun.com/j2se/1.4.2/docs/api/java/net/InetAddress.html#getByName(java.lang.String)
[quot автор]
The host name can either be a machine name, such as "java.sun.com", or a textual representation of
its IP address. If a literal IP address is supplied, only the validity of the address format is checked.
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34522070
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirageСпасибо за пожелание :) Наверное Вы в прошлой жизни были Лениным?

Ну.. знаете-ли. Я-бы предпочёл - менее пассионарную личность.

Я долго наблюдал, как вы с коллегами безуспешно пытались написать правильный шаблон для разбора IP адреса. Но вы его так и не написали правильно. Потому-что не учли различных нотаций записи адреса.

Лично я их знаю три:

десятичная : 192.134.123.121 (в нашем примере)
шестнадцатиричная : 0xC0.0x86.0x7B.0x79
восьмеричная : 0300.0206.0173.0171

Некоторые нотации реально поддерживаются браузерами.

К примеру, адрес скруля может выглядеть так http://0xC3.0x80.0x79.0xFE

Есть ещё упакованный вид, когда номера сеток и машин не разделяются точками (и десятичная нотация никак не мапится в соответствующие разряды).

Еще один пример
Код: plaintext
1.
2.
3.
>ping 0xC38079FE

Обмен пакетами с  195 . 128 . 121 . 254  по с  32  байт данных

С учётом этого всего форм записи получается шесть. Пускай меня поправят специалисты по сетям, если не забыл упомянуть еще чего-то.

Тоесть ваш парсер будет работать только в одном из шести случаев, что, согласитесь достаточно грустно и стыдливо.

Кроме того, диапазон также желательно проверять, поскольку выражение 999.999.999.999 успешно проходит через фильтр regexp-ов но как адрес фактически не существует.
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34522072
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВсё верно. В Java значение байта варьируется от -128 до 127. Чтобы получить unsigned представление байта выполните добавление 256 для отрицательных чисел массива.

И еще раз... учите матчасть.
А прибавление 128 не помогает?
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34522078
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уважаемый mayton , я не в коей мере не хотел вас обидеть, дело в том что вы говорите уже о деталях, которые пусть решает автор этой темы сам, потому что его основной вопрос сводился - как распарсить строку.
и в примерах, приведенных Sarin-ым и мной можно потом обработать конечный результат - числовой без проблем, и дальше строить более гибкий дизайн кода, о котором вы также упомянули.
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34522080
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я и не думал обижатся.

А ведь в эту самую минуту в какой-нибудь южной стране сидит человек и думает: вот сейчас сяду в пирогу и поеду за бананами...
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34522084
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ и не думал обижатся.

А ведь в эту самую минуту в какой-нибудь южной стране сидит человек и думает: вот сейчас сяду в пирогу и поеду за бананами...


я про Ленина :)
...
Рейтинг: 0 / 0
IP adress из стринга в byte[] ?
    #34522106
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
десятичная : 192.134.123.121 (в нашем примере)
шестнадцатиричная : 0xC0.0x86.0x7B.0x79
восьмеричная : 0300.0206.0173.0171

Напишите об этом в Sun, потому как:
http://java.sun.com/j2se/1.4.2/docs/api/java/net/Inet4Address.html
автор
Textual representation of IP addresses
Textual representation of IPv4 address used as input to methods takes one of the following forms:
d.d.d.d
d.d.d
d.d
d
When four parts are specified, each is interpreted as a byte of data and assigned, from left to right, to the four bytes of an IPv4 address.

PS Предлагаю от себя два варианта - двоичная форма записи и троичная.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / IP adress из стринга в byte[] ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]