[英]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.