LINUX.ORG.RU

help. сетевые адреса в двоичном представлении.


0

1

Доброго времени суток.

задаем маску

char mask[] = "255.255.254.0";

есть функция

void
bin(unsigned long n)
{
    int t = 32;
    while (t-- > 0) {
        if (n & 01)
            printf("1");
        else
            printf("0");
        n >>= 1;
        if (t % 8 == 0 && t)
            printf(".");
    }
    printf("\n");
}

делаем

bin(inet_addr(mask));

получаем

11111111.11111111.01111111.00000000
, а надо
11111111.11111111.11111110.00000000

Подскажите, почему так получается?


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

sdio ★★★★★
()
Ответ на: комментарий от sdio

Если напечатать строку наоборот, все равно между единичками нолик стоять будет.

momo
() автор топика
Ответ на: комментарий от momo

Ну тебе уже написали, что не в том порядке выводишь

void
bin(unsigned long n)
{
    int t = 32;
    while (t-- > 0) {
        if (n & 0x80000000)
            printf("1");
        else
            printf("0");
        n <<= 1;
        if (t % 8 == 0 && t)
            printf(".");
    }
    printf("\n");
}[\code]

four_str_sam
()
Ответ на: комментарий от four_str_sam

Да уже разобрался, лег спать и вспомнил про htonl и ntohl) спасибо.

Может подскажешь(не могу разобраться), как получить следующий ip если известна маска и текущий. я думал, что будет работать так

struct in_addr ia;
ia.s_addr = inet_addr("192.168.0.1");
ia.s_addr += (inet_addr("255.255.254.0") << 1) & (~(inet_addr("255.255.254.0)))

momo
() автор топика
Ответ на: комментарий от beastie

Я знаю, что с нуля начинается восьмиричное представление чисел, ты ничего нового тут мне не рассказал.

momo
() автор топика
Ответ на: комментарий от four_str_sam

Кажись и со следующим ip разобрался, спасибо еще раз!

momo
() автор топика
Последнее исправление: momo (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.