2

您好目前我正在开发通过蓝牙与医疗保健设备通信的 Android。医疗保健设备可以发送这种格式的数据包在此处输入图像描述

现在我想知道,如何分别识别 LSB 、 Acces 代码、 Header 、 Msb 和 Payload 。以及如何从这个数据包中检索数据。真的,我是这种数据包开发的新手。我已经用谷歌搜索了,但我只得到了理论上的解决方案。我也想知道,我是否可以使用 Datagrampacket 或其他第三方 API。请有人为此建议我一些想法和教程。提前致谢。

4

2 回答 2

1

DataInputStream 是你的朋友。将它包裹在包裹着 DatagramPacket 的数据、偏移量和长度的 ByteArrayInputStream 上。然后用readBytes()成9字节数组得到访问码,readBytes()成7字节数组得到header,剩下的就是payload。

编辑:

标头真的是 54 位吗?当然应该是56?

于 2012-10-17T01:57:48.050 回答
1

尝试使用以下方法:

(2475 位?它可能应该是 2472 或 2480,或者如果标头是 54 位,这里应该是 2474 位)//读取字节

public byte[] readBytes(InputStream inputStream, int length)
        throws IOException {
    byte[] data = new byte[length];
    int len = inputStream.read(data);
    if (len != length) {
        throw new IOException("Read the end of stream.");
    }
    return data;
}


//Get Header data
byte[] headerData = readBytes(inputStream, 9);

// I think header data need to parse again, its structure should look like the following format:
// | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
// |  Version  | Type  | other values  |
// You can parse them to use headerData


// #######################################
// write bytes
public class ByteWriter {
    private final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    public void writeBytes(byte[] data) {
        try {
            outputStream.write(data);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public byte[] getBytes() {
        return outputStream.toByteArray();
    }
}
于 2012-10-17T02:13:17.680 回答