将 DEC 转换为 IP 飞镖

时间:2021-05-20 09:59:26

标签: flutter dart

我得到一个 int32 : -1407942911,我需要将其转换为 ip

我用过这个功能:

_setIp(int _ip){
    var _strData = StringBuffer();
    for (int i = 0; i<4; i++){
      _strData.write(_ip &0xff );
      if (i < 3) {
        _strData.write(".");
      }
      _ip = _ip >> 8;
    }
    return _strData.toString();
}

但是我得到的 ip 倒过来了:1.127.20.172 而不是 172.20.127.1

我试图复制这个 java 代码

 public String longToIp(long ip) {
    StringBuilder result = new StringBuilder(15);

    for (int i = 0; i < 4; i++) {
        
        result.insert(0,Long.toString(ip & 0xff));

        if (i < 3) {
            sb.insert(0,'.');
        }

        ip = ip >> 8;
    }
    return result.toString();
  }

更新

我解决了错误

    static setIp(int _ip){
        var _strData = StringBuffer();
        for (int i = 0; i<4; i++){
          _strData.write(_ip >> 24 &0xff );
          if (i < 3) {
            _strData.write(".");
          }
          _ip = _ip << 8;
        }
        return _strData.toString();
      }

1 个答案:

答案 0 :(得分:2)

你可以这样做:

import 'dart:io';
import 'dart:typed_data';

void main() {
  print(getIpFromInt32Value(-1407942911)); // 172.20.127.1
}

String getIpFromInt32Value(int value) => InternetAddress.fromRawAddress(
        (ByteData(4)..setInt32(0, value)).buffer.asUint8List())
    .address;