附加字节

时间:2014-10-12 14:10:09

标签: java android

我正在开发一个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];

因为我添加了两个不同的字节类型,我遇到了错误。请告诉我如何解决这个问题......

1 个答案:

答案 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;

如果你不介意设计的精度损失,那很好,否则这可能是一个讨厌的错误。