Formatting an Array of Bytes of MAC Addresses in String

I use this code to find the MAC address of the machine. This code prints the MAC address directly, but I want to return it as a string. I am completely confused.

Please, help.

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(); } 
+7
java string mac-address bytearray
source share
7 answers

There is no standard text representation for Mac addresses. You just need to convert it to hex and separate the bytes for readability. Here is the function I use in ifconfig format for Unix,

 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(); } 

You just need to change the ':' to '-'.

+18
source share

This way you can easily form a Mac address bar.

 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(); } } } 

copy here: http://www.mkyong.com/java/how-to-get-mac-address-in-java/comment-page-1/#comment-139182

+4
source share
+2
source share

It should be something like

 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(); 
+1
source share
  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(); } 
0
source share

I know this is a Java related question, but for Scala users who are here, like me, is a way to do this in Scala:

 bytes.map("%02X" format _).mkString (":") 
0
source share
 String s=""; for (int i = 0; i < mac.length; i++) { s += String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""); } 
-one
source share

All Articles