2013-11-03 16 views
0

我簡單的Java應用程序發送兩個字節的Arduino通過藍牙。一個字節0x0A和第二字節將0XA0,或0xA1,或者0XB0,或0xB1 ...如何從Java應用程序發送的有符號字節到達arduino期望無符號字節?

下面是兩個字節是從Java

public static byte RELAY_ACCESSORIES_OFF = (byte)0xB0; 
public static byte RELAY_ACCESSORIES_ON  = (byte)0xB1; 
... 
connection.Send(new byte[] {0x0A, RELAY_ACCESSORIES_ON}); 
    else 
connection.Send(new byte[] {0x0A, RELAY_ACCESSORIES_OFF}); 

發送的Arduino的只是讀取輸入的數據爲無符號字節。 那麼這個簽名和無符號字節如何在java和arduino之間生效?

+0

我不認爲這有什麼作爲一個符號/無符號字節。它是一個8位的字節。你的意思是說arduino只拾取一個字節而不是數組?連接來自哪一類? –

回答

2

Usigned和符號的整數值(相同尺寸的)由相同的位模式所表示的,區別僅在於它們的解釋。當你將它縮減爲純二進制表示時,不存在有符號或無符號字節。

一個從java符號字節可以傳輸蠻好該將其視爲無符號的接收器。問題一般只發生,因爲程序員不知道的非常不同的行爲來實現depening簽署/無符號時,這是常見的Java字節其投以更大的類型(在實際您可以在執行任何操作隱含發生因爲Java運算符(如+, - ,*,==)被定義爲在一個字節的32位符號擴展值上操作alaway)。

+0

正是我想知道的。我記得教授在不同的機器上用不同的位模式表示不同的數據類型。 –

+0

嗯,你的教授是正確的:)有了更大的類型,你不必擔心*字節順序*(亦稱字節序),或與您的擔心,他們所採用的格式浮點數(存在一些舊格式比IEEE754,主要用於傳統平臺,DEC和PDP有不同的實現IIRC)。並且有一個*和*兩個*補碼錶示整數(前者現在實際上已經絕跡)。 – Durandal

相關問題