第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用android ble接口作為結(jié)構(gòu)發(fā)送uint8和uint32數(shù)據(jù)

如何使用android ble接口作為結(jié)構(gòu)發(fā)送uint8和uint32數(shù)據(jù)

慕村9548890 2023-03-31 14:40:05
我需要使用 Android ble 類發(fā)送以下結(jié)構(gòu),但不幸的是 java 不支持結(jié)構(gòu)類型,我必須將我的結(jié)構(gòu)轉(zhuǎn)換為類。實際上我可以創(chuàng)建一個類似結(jié)構(gòu)的類,但我的大問題是,java 也不支持 uint8 和 uint32 類型。我在 BluethootGattChracteristic 下找到了 Format_UINT32 和 Format_UINT8 方法,但它無法運行我的代碼。我總是使用以下代碼將相同的數(shù)組發(fā)送到目標設(shè)備我的標準 C 結(jié)構(gòu)如下    struct test{    Time1 uint32;    Time2 uint32;    Time3 uint32;    Time4 uint32;    Time5 uint32;    Time6 uint32;    Speed uint8;    Speed2 uint8;    Speed3 uint8;    }我在 java 中創(chuàng)建相同的類型,如下所示long Time1= 4000000000L;long Time2= 1500L;long Time3= 0L;long Time4= 0L;long Time5= 0L;long Time6= 0L;int speed = 01;int speed2 = 02;int speed3 = 04;然后我嘗試用這樣的 ble write 方法發(fā)送這些數(shù)據(jù);Time1= BluetoothGattCharacteristic.FORMAT_UINT32;Time2= BluetoothGattCharacteristic.FORMAT_UINT32;Time3= BluetoothGattCharacteristic.FORMAT_UINT32;Time4= BluetoothGattCharacteristic.FORMAT_UINT32;Time5= BluetoothGattCharacteristic.FORMAT_UINT32;Time6= BluetoothGattCharacteristic.FORMAT_UINT32;speed= BluetoothGattCharacteristic.FORMAT_UINT8;speed2= BluetoothGattCharacteristic.FORMAT_UINT8;speed3= BluetoothGattCharacteristic.FORMAT_UINT8;ByteBuffer buffer = ByteBuffer.allocate(27);buffer.put((byte)Time1);buffer.put((byte)Time2);buffer.put((byte)Time3);buffer.put((byte)Time4);buffer.put((byte)Time5);buffer.put((byte)Time6);buffer.put((byte)speed);buffer.put((byte)speed2);buffer.put((byte)speed3);buffer.order(ByteOrder.LITTLE_ENDIAN);charac.setValue(buffer.array());這段代碼以某種方式發(fā)送數(shù)據(jù)數(shù)組,如 0x1414141411111110000 ……但這是完全錯誤的。如何解決這個問題?或者我怎樣才能創(chuàng)建一個像我上面的結(jié)構(gòu)的類?
查看完整描述

1 回答

?
慕斯王

TA貢獻1864條經(jīng)驗 獲得超2個贊

你的代碼有一些很好的元素,但是你只發(fā)送常量值BluetoothGattCharacteristic.FORMAT_UINT32而沒有實際數(shù)據(jù)。你不需要BluetoothGattCharacteristic.FORMAT_UINT32。


所以讓我們用一個簡單的類來保存數(shù)據(jù):


class Payload {

    int time1;

    int time2;

    int time3;

    int time4;

    int time5;

    int time6;

    byte speed1;

    byte speed2;

    byte speed3;


}

然后使用以下方法從中創(chuàng)建一個字節(jié)數(shù)組ByteBuffer:


byte[] createBytes(Payload payload) {

    ByteByffer buffer = ByteBuffer.allocate(28).order(ByteOrder.LITTLE_ENDIAN);


    buffer.putInt(payload.time1);

    buffer.putInt(payload.time2);

    buffer.putInt(payload.time3);

    buffer.putInt(payload.time4);

    buffer.putInt(payload.time5);

    buffer.putInt(payload.time6);

    buffer.putByte(payload.speed1);

    buffer.putByte(payload.speed2);

    buffer.putByte(payload.speed3);

    buffer.putByte(0);

    return buffer.array();

}

額外的 0 是將數(shù)據(jù)長度填充為 4 的倍數(shù),即 28。最有可能的是,C 結(jié)構(gòu)體的長度為 28 個字節(jié)。


最后,您傳輸數(shù)據(jù):


byte[] data = createBytes(payload);

gattCharacteristic.setValue(data);

請注意,Java 整數(shù)類型是有符號的(例如byte的 -128 到 127 ),而您的 C 類型是無符號的(例如uint8_t的 0 到 255 )。這可能需要在 Java 中進行一些額外的處理。


查看完整回答
反對 回復(fù) 2023-03-31
  • 1 回答
  • 0 關(guān)注
  • 239 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號