|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Со старшим байтом overflow выбрасывает. За пределы Long выходит. В данном случае это не принципиально, так как таких больших диапазонов не будет. В любом случае спасибо Вам большое. Постараюсь на практике разобраться и, может, подправить. Еще раз спасибо. Если получится, напишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 21:25 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
IvanCЗа пределы Long выходитСамо собой. Попробуй использовать Currency - у него целая часть принимает бОльшие значения, при этом - это точный тип. Правда, я не знаю, как с ней будут работать функции двоичных преобразований. IvanCЕсли получится, напишу.если не получится - пиши тем более ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 21:28 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Shocker.Pro, Пока что из всех диапазонов, которые проверил, все совпадает с интернет-калькулятором! Полет нормальный :) Спасибо! P.S.Действительно, сначала нужно разбираться, а потом слизывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 21:30 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Да не должно работать! По крайней мере из-за (n-1) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 21:31 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
А если уже все исправил - так выложи исправленную версию ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 21:31 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Да, с другим типом нужно будет и функции преобразования переделывать кардинально, поэтому проще так сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 21:32 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Спасибо Shocker.Pro за помощь, без него вряд ли догадался бы. Ну и еще вопрос назрел: создал ACCESS базу данных, в которой планирую хранить IP адреса. Решил их записывать в целочисленном формате. Но проблема в том, что в дальнейшем нужно будет производить с ними логическое умножение. Возможно ли это производить прямо в SQL-запросе? Из того, что я прочитал и попробовал, почему-то понял, что с ACCESS такие фокусы не проходят или я ошибаюсь? И в каком формате хранить эти данные? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 00:22 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Что такое логическое умножение? Логическое И? Вроде бы без проблем - Поле1 & Поле2 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 00:26 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
имхо, ТС имеет в виду битовые операции в Акцессе (в Jet) они есть : band, bor, bxor но их можно использовать : - или программно, через АДО Код: vbnet 1. 2.
- или, если для БД включен синтаксис для ANSI 92, то и через интерфейс Акцесса или, если клиентская часть тоже будет в Аксцессе, можно написать пользовательские функции на ВБА и использовать их в запросах ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 01:19 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
В таблице находятся следующие записи: Код Net Mask Provider City 6 1579791360 4294966272 UfaNet Orenburg SQL запрос: SELECT IP.Provider, IP.City FROM IP WHERE IP.Net = (IP.Mask & '1579791641'); Но дает пустые поля. Может что не так сделал? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 11:32 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
во-первых почему число в кавычках? во вторых попробуйте And или BAnd для наложения маски ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 12:21 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Кавычки убрал, попробовал с AND - результат тот же - пустые поля, а на band ругается, что пропущен оператор. А из-за типа поля может быть такая проблема? я поставил числовой тип, действительное число. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 12:34 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
IvanCдействительное число.да, конечно, числа с плавающей запятой не являются точными, нужно использовать типы с фиксированной запятой ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 12:51 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
IvanCВ таблице находятся следующие записи: Код Net Mask Provider City615797913604294966272UfaNetOrenburg SQL запрос: SELECT IP.Provider, IP.City FROM IP WHERE IP.Net = (IP.Mask & '1579791641'); Но дает пустые поля. Может что не так сделал? а что вот это за "приколы" (выделил), которые в 4-е байта и не влазят-то ? ты как 4-х байтные тетрады ИП и маски переводил в целое число ? вот это вот твоё - "Решил их записывать в целочисленном формате" - как сделал ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 13:01 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
"длинное целое", как написано в access имеет предел 2 147 483 647, хоть подсеть и влезает в этот предел, но маска не укладывается. Перевод туда и обратно осуществляется функцией, там тип Variant, поэтому проблем не встречаю. Сейчас вставил в таблицу вместо маски и сети "1", также вместо проверяемого адреса поставил "1", 1 AND 1 = 1, но запрос все так же не отрабатывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 18:57 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
IvanC1 AND 1 = 1,а так (1 AND 1) = 1 приоритет операции сравнения выше, чем битовой (кажется) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 22:34 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Оказывается, на самом деле в запросе Access эти фокусы не прокатывают, подключил базу в среде VBA через Microsoft.ACE.OLEDB.12.0, где и сработал BAND, но снова проблема. Не работает почему-то BAND с этими числами. Переполнение возвращает. Неужели придется разбивать IP адреса на части? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 23:03 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
авторНеужели придется разбивать IP адреса на части? ТС, "открой мне глаза", скажи какой ИП и какую маску ты "представил" в виде этих целых чисел - 1579791360 и 4294966272 покажи эти ИП и маску - тетрадами , потом вместе над тобой посмеёмся ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 23:09 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
94.41.180.0 255.255.252.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 23:11 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
IvanC94.41.180.0 255.255.252.0 с первым - понятно а для 255.255.252.0 - "левое" значение Код: vbnet 1. 2. 3. 4. 5.
соответственно их побитовое произведение Код: vbnet 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 23:23 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
а почему маска отрицательная получилась? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 23:43 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
IvanCа почему маска отрицательная получилась? потому что эта твоя маска не количество хз чего, а всего лишь то, как храниться число с типом Long , которое в 16-ричной форме записываеться как FFFFFC00 а у Long - первый бит - определяет знак числа вот тебе для размышлений Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2014, 23:59 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
кстате, если "пугают" отрицательные дес.числа, то можно просто всё хранить в 16-ричных, прийдёться, правда всё время "морочиться" с преобразованиями, но сами значения, конечно по-наглядней будут ... Код: vbnet 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2014, 00:05 |
|
|
start [/forum/topic.php?fid=60&msg=38522828&tid=2156583]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 273ms |
total: | 408ms |
0 / 0 |