如何判断某个IP是否在某IP段范围内
==================

#### 问题现象

当前IP：192.168.9.230，如何判断该目标IP是否在10.101.10.210~255.201.255.1范围内？

#### 背景知识

IPv4地址采用点分十进制表示法，每个点分部分称为一个"八位组"，范围是0-255。判断某个IP是否在某IP段范围内可以先将IP转换为32位无符号整数，转换原理是基于256进制（2^8）的位权计算。例如：192.168.1.1=192×256³ + 168×256² + 1×256 + 1。

#### 解决方案

判断当前IP是否在某IP段范围内，可以参照以下步骤：

1.  将点分十进制格式的IP地址转换为长整型数字，便于比较大小。
2.  检查目标IP是否在指定的起始IP和结束IP范围内。

function ipToLong(ip: string): number {
  const parts \= ip.split('.').map(part \=\> parseInt(part));
  return parts\[0\] \* Math.pow(256, 3) \+ parts\[1\] \* Math.pow(256, 2) \+ parts\[2\] \* 256 \+ parts\[3\];
}

function isIPInRange(ip: string, startIP: string, endIP: string): boolean {
  const ipNum \= ipToLong(ip);
  const startIPNum \= ipToLong(startIP);
  const endIPNum \= ipToLong(endIP);

  return ipNum \>\= startIPNum && ipNum <\= endIPNum;
}

@Entry
@Component
struct JudgeIp {
  judge() {
    const targetIP \= '192.168.9.230';
    const startIP \= '10.101.10.210';
    const endIP \= '255.201.255.1';

    let res \= isIPInRange(targetIP, startIP, endIP);
    try {
      this.getUIContext().getPromptAction().showToast({ message: \`目标ip地址是否在范围内: ${res}\` });
    } catch (error) {
      console.error(\`Error code: ${error.code}, Message: ${error.message}\`);
    }
  }

  build() {
    Column() {
      Button('查询').onClick(() \=\> {
        this.judge();
      });
    }.width('100%').height('100%').justifyContent(FlexAlign.Center);
  }
}