2012-12-24 83 views
1

我有像0x38,0x39,0xC0和0xE8十六進制代碼,我想發送這個十六進制代碼,因爲它是藍牙,無需轉換爲十六進制或整數。我用這個代碼在我的應用程序發送(藍牙活動):發送十六進制代碼到藍牙

 byte[] hex_txt = {(byte)0x38, (byte)0x39, (byte)0xC0, (byte)0xE8}; 
    OutputStream outStream; 
    try { 
    outStream = socket.getOutputStream(); 
     outStream.write(hex_txt); 
     System.out.println("byte sent: " + hex_txt); 
     } 

當我發送驗證碼到藍牙,進一步發送到Arduino板它必須匹配這些十六進制代碼,並做一些operations.My Arduino的代碼是:

if(Serial.available()>3) 
    { 

      if(Serial.read()==0x38 && Serial.read()==0x39) 
      code=Serial.read()+Serial.read()*256; 
      irsend.sendCode(code,16); 
      Serial.println("code sent is"); 
      Serial.println(code,DEC); 
    } 

與此Arduino的代碼沒有問題,但什麼是米我的應用程序發送到藍牙可能wrong..so它不匹配。我需要發送這些十六進制代碼的類型是什麼?

+0

該代碼對我來說很合適。你收到哪些字節而不是預期的字節? – domsom

+0

@domsom感謝您的重播。我得到實際上有符號的數字,如-64 ...所以我改變像這個字節a = -64; int b =((int)a)& 0xFF;所以這給了我無符號數。 –

+0

什麼是irsend? –

回答

2

-64十進制可能表示爲0xC0(請參閱http://en.wikipedia.org/wiki/Signed_number_representations)。我沒有進入Arduino代碼,但我建議您確保Serial.read()返回的值被解釋爲無符號整數/字節。這將幫助您手動解釋有符號位表示和數字輸出。

+0

是的你是對的。從Arduino代碼我得到有簽名的數字。所以只有我將代碼的聲明更改爲無符號整型代碼。 –