![](/img/trans.png)
[英]How do I convert a Java Hashtable to an NSDictionary (obj-C)?
[英]Java convert string hex values to byte[], recreating this obj-c functionality
我正在制作與特定的低功耗藍牙設備通信的應用程序。 它需要特定的握手,並且在iOS
Objective-C
都可以正常工作,但是,在Java
重新創建此功能時遇到問題
任何想法,不勝感激!
工作Objective-C
代碼:
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];
到目前為止,對於android,我具有以下等效項:
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
相當的設備沒有任何響應,這使我認為發送的數據錯誤/無法識別
更新因此,經過大量的努力之后,我對“我認為!”發生的事情有了更多的了解。
正如下面提到的可怕的袋熊,int的最大值是127,所以0x99和0xAA數組中的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)};
但是,數組中的結果值始終相同。
請幫忙!!! :)
更新2
為什么不像C那樣做
在這段代碼中
String handshakeString = "0x04,0x08,0x0F,0x66,0x99,0x41,0x52,0x43,0x55,0xAA";
byte[] value = handshakeString.getBytes();
這只是使文本字符串,其中第一個字符為0
,第二個字符為x
等
嘗試
byte arr[] = {0x04,0x08,0x0F,0x66,0x99,0x41,0x52,0x43,0x55,0xAA};
編輯
您可能需要重新考慮諸如0x99
值,如java中的字節值是根據javadocs
最小值為-128,最大值為127(含)。
String handshakeString = "0x04,0x08,0x0F,0x66,0x99,0x41,0x52,0x43,0x55,0xAA";
byte[] value = handshakeString.getBytes();
也將占了,
所以要創建多bytes
,並不會geht相同byte
S作為在C代碼。
嘗試直接使用byte[]
。
byte[] value=new byte[]{0x04,0x08,0x0F,0x66,0x99,0x41,0x52,0x43,0x55,0xAA};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.