2014-10-12 33 views
1

我正在開發一個Android應用程序,並且在添加字節來編寫數據包時遇到了一些問題。我創建了一個獲取客戶端MAC地址的方法,返回值是一個字符串(MACAdd)。附加字節

private String getMACAddress() { 
    WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    WifiInfo info = manager.getConnectionInfo(); 
    MACAdd= info.getMacAddress(); 
    return MACAdd; 
} 

我已經將MACAddrs聲明爲靜態字符串,並在createPackect()方法中完成了以下分配。 MACAddrs = getMACAddress(); byte [] MACAddres = MACAddrs.getBytes();

在同一個createPacket()方法中,我也聲明瞭以下數據。

byte Node = (byte)0x3039; 
    byte Cost = (byte)0x1; 
    byte MaxMsgSize = (byte) 0x100000; 
    byte KeepAlivePiriod = (byte)0x2710; 
    byte NetworkID = (byte)0x1; 

我需要將這些字節添加到單個數組中以組成數據包。

byte[] BroadcastPacket = new byte[Node + Cost + SerialNumber + MaxMsgSize + KeepAlivePiriod + NetworkID + MACAddres + IPAddress]; 

因爲我添加兩個不同的字節類型,我有一個錯誤。請告訴我如何解決這個問題......

回答

2

一個便捷的方法來連接字節數組可能會有所幫助:

byte[] concatArrays(byte[] ... arrays) { 
    int totalLength = 0; 
    for (byte[] arr : arrays) { 
     totalLength += arr.length; 
    } 
    byte[] result = new byte[totalLength]; 
    int start = 0; 
    for (byte[] arr : arrays) { 
     System.arraycopy(arr, 0, result, start, arr.length); 
     start += arr.length; 
    } 
    return result; 
} 

利用這一點,你可以這樣創建byte[] BroadcastPacket

byte[] BroadcastPacket = concatArrays(
    new byte[Node + Cost + SerialNumber + MaxMsgSize + KeepAlivePiriod + NetworkID], 
    MACAddrs.getBytes(), 
    IPAddrs.getBytes() 
); 

順便說一句,你應該使用camelCase變量名稱。如果該值你想分配

byte cost = 0x1; 

而你並不需要這樣的值轉換爲byte

byte cost = (byte) 0x1; 

該作品一樣好到一個byte實際上並不適合一個字節, 轉換爲字節,你正在失去精度,例如在這裏:

byte b3 = (byte) 0x100000; 

如果你不介意的設計精度損失,那很好,否則這可能是一個討厭的錯誤。

+0

這對我有用。謝謝 ............. – navin 2014-10-13 01:35:38