2

こんにちは現在、ブルートゥースを介してヘルスケアデバイスと通信するAndroidに取り組んでいます。ヘルスケア デバイスは、この形式のデータ パケットを送信できます。ここに画像の説明を入力

LSB 、 Access コード、 Header 、 Msb 、および Payload を個別に識別する方法を知りたいです。このパケットからデータを取得するにはどうすればよいですか。本当に、私はこの種のデータ パケットの開発は初めてです。私はグーグルで検索しましたが、理論的な解決策しか得られませんでした。また、Datagrampacket または他のサードパーティ API を使用できるかどうかも知りたいです。親切に誰かが私にこれに関するいくつかのアイデアとチュートリアルを提案してくれます. 前もって感謝します。

4

2 に答える 2

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 に答える
1

DataInputStream はここでの友達です。DatagramPacket のデータ、オフセット、および長さをラップした ByteArrayInputStream をラップします。次にreadBytes()、アクセス コードを取得するために 9 バイトの配列を使用しreadBytes()、ヘッダーを取得するために 7 バイトの配列を使用し、残りはペイロードです。

編集:

ヘッダーは本当に 54 ビットですか? たしか56だったはず?

于 2012-10-17T01:57:48.050 に答える