2011-09-23 163 views
3

試圖讓MAC地址值與循環:的Java for循環生成MAC地址

String macAddr = "AA:BB:CC:DD:"; 
char[] chars = {'A', 'B', 'C', 'D', 'E', 'F'}; 
String[] strings = {"0", "0", "0", "0"}; 

for (int i=0; i<strings.length; i++) 
{ 
    //counter from 0 to F 
    for (int d = 0; d <= 9; d++) 
    { 
     strings[i] = ""+d; 
     print(); 
    } 
    for (int d = 0; d< chars.length; d++) 
    { 
     strings[i] = ""+chars[d]; 
     print(); 
    } 
} 

其中的print()是:

System.out.println(macAddr+strings[3]+strings[2]+":"+strings[1]+strings[0]); 

,但我發現運行在:

AA:BB:CC:DD:00:0D
AA:BB:CC:DD:00:0E
AA:BB:CC:DD:00:0F
AA:BB:CC:DD:00:0F
AA:BB:CC:DD:00:1F
AA:BB:CC:DD:00:2F
AA:BB:CC:DD:00: 3F

這兩個問題是每個交叉點的雙重值(例如AA:BB:CC:DD:00:0F) ,並且每個值的值停止在F處。

我試圖讓他們爲:

AA:BB:CC:DD:00:0D
AA:BB:CC:DD:00:0E
AA:BB:CC:DD :00:0F
AA:BB:CC:DD:00:11
AA:BB:CC:DD:00:12
AA:BB:CC:DD:00:13

乾杯:)

+3

爲什麼不數到16並轉換爲十六進制? –

+0

不知道如何,這就是爲什麼下面的答案得到了我的「回答」。簡單的解決方案,正是我想要做的。 – spuriosity

回答

4

嘗試此保持簡單:

public static void main(String... args) { 
    String macAddr = "AA:BB:CC:DD:"; 
    for (int i = 0; i < 256; i++) { 
     for (int j = 0; j < 256; j++) { 
      String fullAddr = String.format(macAddr + "%02X:%02X", i, j); 
      System.out.println(fullAddr); 
     } 
    } 
} 

輸出(縮寫):

AA:BB:CC:DD:00:00 
AA:BB:CC:DD:00:01 
AA:BB:CC:DD:00:.. 
AA:BB:CC:DD:00:10 
AA:BB:CC:DD:00:0A 
AA:BB:CC:DD:00:.. 
AA:BB:CC:DD:00:0F 
AA:BB:CC:DD:00:10 
AA:BB:CC:DD:00:.. 
AA:BB:CC:DD:00:FF 
AA:BB:CC:DD:01:00 
AA:BB:CC:DD:..:.. 
AA:BB:CC:DD:FF:FF 
+0

完美,謝謝! – spuriosity

5

使用long來存儲您的mac地址,並創建一個小函數將其轉換爲String

public static String toMacString(long mac) { 

    if (mac > 0xFFFFFFFFFFFFL || mac < 0) 
     throw new IllegalArgumentException("mac out of range"); 

    StringBuffer m = new StringBuffer(Long.toString(mac, 16)); 
    while (m.length() < 12) m.insert(0, "0"); 

    for (int j = m.length() - 2; j >= 2; j-=2) 
     m.insert(j, ":"); 
    return m.toString().toUpperCase(); 
} 

public static void main(String[] args) { 

    long mac = 0xAABBCCDD0000L; 

    for (long i = 0; i < 1000; i++) 
     System.out.println(toMacString(mac++)); 
} 

輸出示例:

AA:BB:CC:DD:00:00 
AA:BB:CC:DD:00:01 
AA:BB:CC:DD:00:02 
AA:BB:CC:DD:00:03 
AA:BB:CC:DD:00:04 
AA:BB:CC:DD:00:05 
AA:BB:CC:DD:00:06 
.... 
AA:BB:CC:DD:03:DF 
AA:BB:CC:DD:03:E0 
AA:BB:CC:DD:03:E1 
AA:BB:CC:DD:03:E2 
AA:BB:CC:DD:03:E3 
AA:BB:CC:DD:03:E4 
AA:BB:CC:DD:03:E5 
AA:BB:CC:DD:03:E6 
AA:BB:CC:DD:03:E7 
+0

添加一個'toUpperCase()',結果應該是完美的。 :)(+1) – Thomas

+0

它不起作用,如果第一個數字是0,但 –

+0

托馬斯:好點,固定! @Maurice Perry:在你的評論發佈之前修正了..;) – dacwe

0
String[] Mac = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}; 
    Random rd = new Random(); 
    rd.nextInt(15); 
    String result=""; 

    for(int i=0;i<6;i++){ 
     String a = Mac[rd.nextInt(15)]; 
     String b = Mac[rd.nextInt(15)]; 
     result+=a+b; 
     if(i<5){ 
      result+=":"; 
     } 

    }