にIPのために長いを返す: -のinet_addr()私は以下のように、私のIPサブネットマスク内にあるかどうかを確認する関数を記述しようとしています逆順
bool isIPinSubnet(CString ip, CString network, int keepbits)
{
ULONG ip_addr = 0;
ULONG network_addr = 0;
UINT32 mask_addr = ~(~(UINT32)(0) >> keepbits);
ip_addr = inet_addr(ip);
network_addr = inet_addr(network);
ULONG net_lower = (network_addr & mask_addr);
ULONG net_upper = (net_lower | (~mask_addr));
if (ip_addr >= net_lower && ip_addr <= net_upper) {
return true;
}
return false;
}
問題が機能していません。デバッグでは、inet_addr()関数がIPの逆順でlongを返すことがわかりました。 IP: 192.168.0.15
ため例えば 、私はこれをやっている場合は、isIPinSubnet("192.168.0.15","192.168.0.1",24);
長いのinet_addr戻っは251701440
とIP: 192.168.0.1
が16820416
です。ここhttp://www.smartconversion.com/unit_conversion/IP_Address_Converter.aspx
251701440
をチェック
はIP: 15.0.168.192
に対応し、
16820416
は明らかに我々はのinet_addrに渡されたものの逆であるIP: 1.0.168.192
に対応しています。
これはなぜこのように動作しますか?それを修正するには?
ネットワークバイトオーダー[MSDN 'inet_addr'参照](https://msdn.microsoft.com/en-us/library/windows/desktop/ms738563(V =からホストバイトオーダー...対vs.85).aspx): "すべてのインターネットアドレスがIPのネットワーク順序で返されます" –
htonlまたはその友人ntohlを参照してください。 –