java

[Java] Mac주소 Hex String 변환

잘할수있을거야 2022. 10. 28. 09:22

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/NetworkInterface.html#getHardwareAddress() 

 

NetworkInterface (Java SE 11 & JDK 11 )

Get an Enumeration with all or a subset of the InetAddresses bound to this network interface. If there is a security manager, its checkConnect method is called for each InetAddress. Only InetAddresses where the checkConnect doesn't throw a SecurityExceptio

docs.oracle.com

 

NetworkInterface.getHardwareAddress() -> byte[]배열로 리턴

Mac주소의 한칸은 00~FF까지 0~255에 해당하는 256개의 값으로 byte 타입으로 충당가능하지만 byte 타입은 범위가 -128~127 이므로 범위의 반이 밀릴텐데 String.format() %x 포맷으로 실제 어떻게 되는지 출력해봄

package string;

public class MacAddressTest {

	public static void main(String[] args) {

		System.out.println("Mac 주소 확인 테스트 -128부터 127까지");

		byte testByte = Byte.MIN_VALUE;
		while (testByte != Byte.MAX_VALUE) {
			System.out.println("byte: " + testByte 
					+ " => mac: " + String.format("%X", testByte));
			testByte = (byte) (testByte + 1);
		}
		System.out.println();
	}

}

 

결과

byte: -128 => mac: 80

byte: -127 => mac: 81

...

byte: -2 => mac: FE

byte: -1 => mac: FF

byte: 0 => mac: 0

byte: 1 => mac: 1

...

byte: 125 => mac: 7D

byte: 126 => mac: 7E


두자리 String을 맞추기 위해 

package string;

public class MacAddressTest {

	public static void main(String[] args) {

		System.out.println("Mac 주소 확인 테스트 -128부터 127까지");

		byte testByte = Byte.MIN_VALUE;
		while (testByte != Byte.MAX_VALUE) {
			System.out.println("byte: " + testByte 
					+ " => mac: " + String.format("%02X", testByte)); //%02X로
			testByte = (byte) (testByte + 1);
		}
		System.out.println();
	}

}