私は特定のBluetooth Low Energyデバイスと通信するアプリケーションを作成しています。これは、特定のハンドシェイクを必要とし、これは、すべてのしかし、私はトラブル大歓迎Java
Javaは文字列16進値をバイト[]に変換し、このobj-c機能を再現します
任意の考えでは、この機能を再作成を持っています、iOS
ためObjective-C
に完璧に働いています!
byte[] handshake = {0x04,0x08,0x0F,0x66,(byte)0x99,0x41,0x52,0x43,0x55,(byte)0xAA};
characteristic.setValue(handshake);
boolean writeStatus = gatt.writeCharacteristic(characteristic);
Log.d(TAG,"Handshake sent: " + writeStatus);
、iOSのは素晴らしい作品が、Java
における同等の応答を取得していない:私は同等のものとして、次のしているこれまでのところ、Android向け
uint8_t bytes[] = {0x04,0x08,0x0F,0x66,0x99,0x41,0x52,0x43,0x55,0xAA};
NSData *data = [NSData dataWithBytes:bytes length:sizeof(bytes)];
[_btDevice writeValue:data forCharacteristic:_dataCommsCharacteristic type:CBCharacteristicWriteWithResponse];
:
Objective-C
コードをWORKINGデバイスから送信されたデータが間違っている/認識されていないと思うようになりました。
UPD ATE これで何度も取り組んだ後、私は「私は思っています! INTの最大値以下に述べ
として怖いウォンバットは0x99と0xAAをアレイ127のSO 2つの値であるが、私は値を持つでい以下
がこの範囲外もちろんです。期待値が
する必要がありますしかしbyte bytes[] = {0x04,0x08,0x0F,0x66,(byte)0x99,0x41,0x52,0x43,0x55,(byte)0xAA};
Log.d(TAG, Arrays.toString(bytes));
は
[4, 8, 15, 102, -103, 65, 82, 67, 85, -86]
を生成します
[4, 8, 15, 102, 153, 65, 82, 67, 85, 170]
私は、暗黙的にこれらの面倒なバイトをキャストしようとしたとも以下の下に試してみました:
byte bytes[] = {0x04,0x08,0x0F,0x66,(byte)(0x99 & 0xFF),0x41,0x52,0x43,0x55,(byte)(0xAA & 0xFF)};
配列の結果の値は常に同じですが。
助けてください!:)それを掘りの日の後
UPDATE 2
は、値が間違ってログインしているが、Bluetoothデバイスによって認識される値が正しいすべきであると思わので、私はこの質問とhere上で継続的に変更しました
新しいコードが何をしているのか、また期待どおりに動作していないのかを詳しく説明できますか? –