代码之家  ›  专栏  ›  技术社区  ›  rgksugan

将MAC地址字节数组格式化为字符串

  •  7
  • rgksugan  · 技术社区  · 15 年前

    我正在使用此代码查找机器的MAC地址。这段代码直接打印MAC地址,但我想将其作为字符串返回。我完全困惑了。

    请帮忙。

    try {
    
        InetAddress add = InetAddress.getByName("10.123.96.102");
        NetworkInterface ni1 = NetworkInterface.getByInetAddress(add);
        if (ni1 != null) {
            byte[] mac1 = ni1.getHardwareAddress();
            if (mac1 != null) {
                for (int k = 0; k < mac1.length; k++) {
                    System.out.format("%02X%s", mac1[k], (k < mac1.length - 1) ? "-" : "");
                }
            } else {
                System.out.println("Address doesn't exist ");
            }
            System.out.println();
        } else {
            System.out.println("address is not found.");
        }
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (SocketException e) {
        e.printStackTrace();
    }
    
    8 回复  |  直到 15 年前
        1
  •  19
  •   ZZ Coder    15 年前

    MAC地址没有标准的文本表示。您只需要将其转换为十六进制,并分离字节以提高可读性。以下是我在Unix上使用的ifconfig格式的函数,

    public static String getMacAddress(String ipAddr)
            throws UnknownHostException, SocketException {
        InetAddress addr = InetAddress.getByName(ipAddr);
        NetworkInterface ni = NetworkInterface.getByInetAddress(addr);
        if (ni == null)
            return null;
    
        byte[] mac = ni.getHardwareAddress();
        if (mac == null)
            return null;
    
        StringBuilder sb = new StringBuilder(18);
        for (byte b : mac) {
            if (sb.length() > 0)
                sb.append(':');
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
    

    只需将“:”更改为“-”。

        2
  •  4
  •   Az MaYo    11 年前

    通过这种方式,您可以轻松地格式化MAC地址字符串。

    import java.net.InetAddress;
    import java.net.NetworkInterface;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    
    public class App{
    
       public static void main(String[] args){
    
        InetAddress ip;
        try {
    
            ip = InetAddress.getLocalHost();
            System.out.println("Current IP address : " + ip.getHostAddress());
    
            NetworkInterface network = NetworkInterface.getByInetAddress(ip);
    
            byte[] mac = network.getHardwareAddress();
    
            System.out.print("Current MAC address : ");
    
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < mac.length; i++) {
                sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));        
            }
            System.out.println(sb.toString());
    
        } catch (UnknownHostException e) {
    
            e.printStackTrace();
    
        } catch (SocketException e){
    
            e.printStackTrace();
    
        }
    
       }
    
    }
    

    从这里复制: http://www.mkyong.com/java/how-to-get-mac-address-in-java/comment-page-1/#comment-139182

        3
  •  2
  •   Bozho    15 年前

    也许你可以用 Hex.encodeHex(bytes) 来自通用编解码器。

    Here are 没有第三方库的其他方法。

        4
  •  1
  •   Abdelsalam Shahlol Rohit Martires    8 年前

    应该是这样的

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < mac.length(); i++) {
        b.append(String.format("%02X%s", mac[i], (i < mac.length() - 1) ? "-" : "");
    
    String s = sb.toString();
    
        5
  •  0
  •   TJR    15 年前
      private static final byte[] NULL_MAC = new byte[] {0, 0, 0, 0, 0, 0};
    
      public static String getMacString(byte[] macAddress) {
        StringBuilder retval = new StringBuilder(17);
        if (macAddress == null) {
          macAddress = NULL_MAC;
        }
        boolean isFirst = true;
        for (byte b : macAddress) {
          if (!isFirst) {
            retval.append(":");
          } else {
            isFirst = false;
          }
          retval.append(String.format("%02x", b & 0xff));
        }
        return retval.toString();
      }
    
        6
  •  0
  •   Andreas Dolk    14 年前
    String s="";
    for (int i = 0; i < mac.length; i++) { 
      s += String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");
    }
    
        7
  •  0
  •   Jeroen Kransen    11 年前

    我知道这是一个Java相关的问题,但是对于像斯卡拉这样结束的用户来说,这是斯卡拉的一个方法:

    bytes.map("%02X" format _).mkString (":")
    
        8
  •  0
  •   Pang Ajmal PraveeN    6 年前

    对于轻量和快速的产品,请尝试以下操作。第三方外部依赖性是最小的,只使用一些“老派”的位数学。

    public static String buildMACAddressString(byte[] macaddress) {
        char[] buffer = new char[macaddress.length*3];
        char[] inttohex= {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
        int destIndex=0;
        byte byteValue;
        for (int i = 0; i < macaddress.length; i++) {
            // pull current byte value
            byteValue = (byte) (macaddress[i] & 0xff);
            // convert high nibble to hex char and store into char array..
            buffer[destIndex++]=inttohex[(byteValue&0xf0)>>4];
            // Convert low nibble to hex char and store into char array..
            buffer[destIndex++]=inttohex[byteValue&0xf];
            // Inject spacer
            if (i < macaddress.length-1)
                buffer[destIndex++]=':';
        }
        return String.valueOf(buffer,0,destIndex);
    }
    
    推荐文章