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

Код: 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
12.05.2007, 22:34:08
    #34521289
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IP adress из стринга в byte[] ?
Сори, 127 необходимо воспринимать как 128:)

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

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

Код: 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
12.05.2007, 22:40:05
    #34521295
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IP adress из стринга в byte[] ?
SarinПо хорошему надо бы регулярное выражение.

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

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

ну а потом по группам извлекать
...
Рейтинг: 0 / 0
12.05.2007, 22:53:52
    #34521307
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IP adress из стринга в byte[] ?
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
12.05.2007, 23:47:13
    #34521350
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IP adress из стринга в byte[] ?
http://java.sun.com/j2se/1.4.2/docs/api/java/net/Inet4Address.html#getAddress()
...
Рейтинг: 0 / 0
13.05.2007, 02:10:09
    #34521422
Zeleboba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IP adress из стринга в byte[] ?
Всем спасибо!
...
Рейтинг: 0 / 0
13.05.2007, 11:21:12
    #34521519
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IP adress из стринга в byte[] ?
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
13.05.2007, 13:11:04
    #34521611
i23m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IP adress из стринга в byte[] ?
действительно, в 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
13.05.2007, 13:18:50
    #34521619
y3u
y3u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IP adress из стринга в byte[] ?
i23mдействительно, в char надо засовывать или в String
и, по-моему, "." в split зарезервирована. поэтому ее надо на что-то заменить


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

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

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

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

Спасибо за пожелание :) Наверное Вы в прошлой жизни были Лениным?
...
Рейтинг: 0 / 0
13.05.2007, 23:16:22
    #34522034
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IP adress из стринга в byte[] ?
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
14.05.2007, 00:00:45
    #34522070
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IP adress из стринга в byte[] ?
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
14.05.2007, 00:05:15
    #34522072
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IP adress из стринга в byte[] ?
maytonВсё верно. В Java значение байта варьируется от -128 до 127. Чтобы получить unsigned представление байта выполните добавление 256 для отрицательных чисел массива.

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

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

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


я про Ленина :)
...
Рейтинг: 0 / 0
14.05.2007, 01:18:21
    #34522106
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IP adress из стринга в byte[] ?
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
Форумы / Java [игнор отключен] [закрыт для гостей] / IP adress из стринга в byte[] ? / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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