0

何が欠けているのかわからない。IP アドレス 172.27.12.32 が IP アドレス 20.0.0.0 と 255.255.252.0 の範囲内にあるかどうかを判断しようとしています。

私がやっていることは次のとおりです。

std::string one("200.0.0.0");
std::string two("172.27.12.32");
std::string three("255.255.255.255");

long one_addr = inet_addr(one.c_str());
long two_addr = inet_addr(two.c_str());
long three_addr = inet_addr(three.c_str());

one_addr は 200 に等しい two_addr は 537664428 に等しい three_addr は 4294967295 に等しい

two_addr は one_addr より大きいが、最小 IP アドレスが 200.0.0.0 の場合、172.27.12.32 は範囲外

172.27.12.32 が 200.0.0.0 と 255.255.255.255 の範囲内にないかどうかを確認するにはどうすればよいですか?

4

2 に答える 2

4

ヒント: =) ( http://www.stev.org/post/2012/08/09/C++-Check-an-IP-Address-is-in-a-IPMask-range.aspx )

uint32_t IPToUInt(const std::string ip) {
    int a, b, c, d;
    uint32_t addr = 0;

    if (sscanf(ip.c_str(), "%d.%d.%d.%d", &a, &b, &c, &d) != 4)
       return 0;

    addr = a << 24;
    addr |= b << 16;
    addr |= c << 8;
    addr |= d;
    return addr;
}

あなたの質問に答えるにはそれで十分だと思います

于 2013-04-22T21:58:29.093 に答える
0

inet_addr()関数in_addr_tは構造体インスタンスを返します。

in_addr_t inet_addr(const char *cp);

多くの場合、これは 32 ビット整数の typedef であり、すべてのアーキテクチャで常に long であるとは限りません。

いずれにせよ、20.0.0.0255.255.252.0in_addr_t値に変換することを検討してください。次に、それらの結果を関心のある値と比較します。あなたは何を期待しますか?

于 2013-04-22T22:01:44.390 に答える