2017-03-23 1 views
0

私は特定のBluetooth Low Energyデバイスと通信するアプリケーションを作成しています。これは、特定のハンドシェイクを必要とし、これは、すべてのしかし、私はトラブル大歓迎JavaJavaは文字列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上で継続的に変更しました

+0

新しいコードが何をしているのか、また期待どおりに動作していないのかを詳しく説明できますか? –

答えて

0

は、なぜあなたはそれをこのコードでC

String handshakeString = "0x04,0x08,0x0F,0x66,0x99,0x41,0x52,0x43,0x55,0xAA"; 
byte[] value = handshakeString.getBytes(); 
と同じ方法を行っていません

これはただの最初の文字が0であり、第二は、あなたはおそらく、このような0x99などの値を再考する必要が編集

byte arr[] = {0x04,0x08,0x0F,0x66,0x99,0x41,0x52,0x43,0x55,0xAA}; 

を試してみてくださいxなど

あるテキスト文字列を作っていますJavaの場合と同様に、バイト値はjavadocsのとおりです。

最小値は-128、最大値は127(両端を含む)です。

を参照してくださいCan we make unsigned byte in Java

+0

提案してくれてありがとう、私はあなたの提案を試みたが、intからbyteへの不可逆変換としてコンパイルエラーを取得する。私はそれぞれの項目をバイトにキャストしようとしましたが(間違っているようです)、コンパイルは正常ですが、デバイスはまだコマンドを認識しません。 残念なことに、ハードウェアの製造元は必要なコマンドを0x66,0x99,0x41,0x52,0x43 、0x55,0xaa 0x99要素を変更することができません –

+0

リンク内の提案に従ってショート配列を使用しようとしましたか? –

+0

私はちょうど短い配列の提案を試みた、それは残念なことに違いを作るようではありません。 –

0
String handshakeString = "0x04,0x08,0x0F,0x66,0x99,0x41,0x52,0x43,0x55,0xAA"; 
byte[] value = handshakeString.getBytes(); 

,を占め、そんなにbytesに作成され、Cコードと同じbyte秒gehtませんでしょう。

byte[]を直接ご利用ください。

byte[] value=new byte[]{0x04,0x08,0x0F,0x66,0x99,0x41,0x52,0x43,0x55,0xAA}; 
関連する問題