我正在开发一个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];
因为我添加了两个不同的字节类型,我遇到了错误。请告诉我如何解决这个问题......
答案 0 :(得分: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
:
byte cost = (byte) 0x1;
这同样有效:
byte cost = 0x1;
如果您尝试分配给byte
的值实际上不适合某个字节,
转换为字节你正在失去精度,例如:
byte b3 = (byte) 0x100000;
如果你不介意设计的精度损失,那很好,否则这可能是一个讨厌的错误。