我正在创建一个与特定蓝牙低功耗设备通信的应用。它需要特定的握手,这对于Objective-C
的{{1}}完全有效,但是,我在iOS
非常感谢任何想法!
工作Java
代码:
Objective-C
到目前为止对于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];
如前所述,iOS效果很好,但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);
中的等效设备没有得到设备的响应,导致我认为发送的数据错误/无法识别
更新 所以,在经过充分的摔跤之后,我对进展情况有了更多的了解,我认为!'
正如下面提到的Scary Wombat一样,int的最大值是127,所以0x99和0xAA数组中的2个值当然超出了这个范围
以下是我所处的价值观点:
Java
可生产
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]
但是,数组中的结果值始终相同。
请帮忙!!! :)
更新2
经过一天的挖掘后,似乎虽然值记录错误,蓝牙设备感知的值应该仍然是正确的,所以我修改了这个问题并继续here
答案 0 :(得分:0)
你为什么不像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(含)。
答案 1 :(得分:0)
String handshakeString = "0x04,0x08,0x0F,0x66,0x99,0x41,0x52,0x43,0x55,0xAA";
byte[] value = handshakeString.getBytes();
还会考虑,
,因此会创建很多bytes
,并且不会在您的c代码中创建相同的byte
AS。
尝试直接使用byte[]
。
byte[] value=new byte[]{0x04,0x08,0x0F,0x66,0x99,0x41,0x52,0x43,0x55,0xAA};