есть ли функция перевода IP адреса из числа 32bit в формат ххх.ххх.ххх.ххх?

Тема в разделе "WASM.NETWORKS", создана пользователем h0kum, 28 фев 2005.

  1. h0kum

    h0kum New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2003
    Сообщения:
    47
    сабж

    знаю как можно самому перевести, но неохото в FPU залезать

    может есть функция, для это?
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
  3. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    И причем здесь пиво Сокол (FPU)?
    Код (Text):
    1.  
    2. char buf[16];
    3. long ip32 = 1234567890;
    4. sprintf(buf, "%u.%u.%u.%u", (ip32>>24) & 0xff, (ip32>>16) & 0xff, (ip32>>8) & 0xff, ip32&0xff);
    5.  
     
  4. Nimnul

    Nimnul New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    136
    Адрес:
    не Китай
    Лучше сделать свою функцию она работать будет быстрее.



    алгоритм:

    X = Y1 * 256 ^ 0 + Y2 * 256 ^ 1 + Y3 * 256 ^ 2 + Y4 * 256 ^3



    где Yx это число не превышающее один байт (ip адрес Y4.Y3.Y2.Y1)

    Пример:

    81.171.151.8 = 1358954496 + 11206656 + 38656 + 8 = 1370199816
     
  5. Nimnul

    Nimnul New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    136
    Адрес:
    не Китай
    Y4 = int (X / 256 ^ 3)

    Y3 = int ((X - Y4) / 256 ^ 2)

    Y2 = int ((X - Y4 - Y3) / 256)

    Y1 = X - Y4 - Y3 - Y2
     
  6. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
  7. Avalonec

    Avalonec New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    111
    Адрес:
    Тула
    h0kum



    inet_ntoa

    и обратная

    inet_addr



    ws2_32.dll
     
  8. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Nimnul

    А можно немножко проще:
    Код (Text):
    1.  
    2. mov al,byte [X+0]
    3. mov byte [Y1],al
    4. mov al,byte [X+1]
    5. mov byte [Y2],al
    6. mov al,byte [X+2]
    7. mov byte [Y3],al
    8. mov al,byte [X+3]
    9. mov byte [Y4],al
    10.  


    Ну а дальше уже байт в строку гнать.
     
  9. Nimnul

    Nimnul New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    136
    Адрес:
    не Китай
    n0p

    Я написал только алгоритм ;)
     
  10. Nimnul

    Nimnul New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    136
    Адрес:
    не Китай
    Для тех кто не знает...

    т.к. автор топика написал что знает как переводить, но так тема мне кажется более закрытой))
     
  11. ZeroMemory

    ZeroMemory New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    79
    А не проще ли юзать inet_ntoa() из ws2_32.dll ? :))
     
  12. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    А для сложения пары чисел нет какой нить крутой dll?
     
  13. amitophia

    amitophia New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2004
    Сообщения:
    44
    The Svin

    Есть такая, но в интернете её точно не найдёшь: имеется она только у закрытых кракеских групп, и они не стремятся её распространять. Мне она досталась по о-о-очень большому блату, поэтому выложить я её не смогую, уж извините. Замечу только, что она выполняет ещё ряд весьма полезных фнкций (вычитание, умножение и пр.)
     
  14. ZeroMemory

    ZeroMemory New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    79
    The Svin

    Как правило 32битный адрес преобразуют в ИП с точками (и обратно) при работе с сокетами. Поэтому наиболее логично юзать именно короткую ф-цию inet_ntoa(), чем всякие громоздкие формулы, т.к. ws2_32.lib уже инклудиться..
     
  15. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Какие формулы? Там четыре байта двойного слова IP в десятичном представлении, даже лидирующие нули убирать не нужно.