簡體   English   中英

Java將字符串十六進制值轉換為byte [],重新創建了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(含)。

請參閱我們可以在Java中制作無符號字節嗎

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM