Ну, учитывая, что он работает для ваших немасковых значений (включая первое, в котором также установлен старший бит), я бы посмотрел, что на самом деле содержит mask
.
Что это, когда вы распечатываете его как обычный беззнаковый длинный? Моя ставка в том, что mask
на самом деле не правильное значение:
printf ("%08x\t%08x\t%08x\n", dstAddr, gateWay, mask);
(при условии, что у вас есть четыре байта long).
Например, эта маленькая программа (скомпилированная под Cygwin):
#include <stdio.h>
int main (void) {
unsigned long dstAddr, gateWay, mask;
dstAddr = 0x007aa8c0;
gateWay = 0x00000000;
mask = 0x00ffffff;
printf("%-15s %-15s %-15s\n",
inet_ntoa (dstAddr),
inet_ntoa (gateWay),
inet_ntoa (mask));
printf("%-15s ", inet_ntoa (dstAddr));
printf("%-15s ", inet_ntoa (gateWay));
printf("%-15s\n", inet_ntoa (mask));
printf ("%08x%8s%08x%8s%08x\n",
dstAddr, "",
gateWay, "",
mask);
return 0;
}
выходы:
192.168.122.0 192.168.122.0 192.168.122.0
192.168.122.0 0.0.0.0 255.255.255.0
007aa8c0 00000000 00ffffff
Обратите внимание, что я должен был разделить свои вызовы на inet_ntoa
, поскольку он использует статический буфер. Когда я делал все это за один printf
, он перезаписывал содержимое этого буфера до того, как какой-либо из них был напечатан, поэтому я обработал только последний. Я не думаю , что происходит в вашем случае, так как вы получаете разные значения.