2015-04-27 42 views
-3

我得到那些字節來自速度傳感器:如何獲得最重要和最不重要的字節的int/double?

byte[] array = new byte[2]; 

array[0] = response.getDataPayload()[6]; 
array[1] = response.getDataPayload()[7]; 

首先是MSB(最高顯著字節)和第二個LSB(減顯著字節)。我知道這是因爲這就是它在文檔中所描述的...

如何將兩個變量轉換爲int/double? (在C#)

+0

使用Convert.ToInt32方法 - https://msdn.microsoft.com/en-us/library/7hk2thbx%28v=vs.110%29.aspx – farukdgn

+0

看看BitConverter類 –

+2

'int result =((( int)array [0])<< 8)|數組[1];'應該做的伎倆。我第一次忘了Or('|')。 –

回答

0

如果你需要的所有字節轉換爲正數試試這個:

int value = array[1]*256 + array[0]; 
+1

也接近但錯了 –

+0

提示,0x0100不是255 –

+3

@BenVoigt是非常迂腐的AdamF建議「嘗試」的代碼,並從未聲稱這是正確的解決方案:) –

4

有一個內置的叫BitConverter類,它做到了這一點:

byte[] array = new byte[2]; 

    array[0] = response.getDataPayload()[7]; 
    array[1] = response.getDataPayload()[6]; 

//or, you could do: 
    array[0] = response.getDataPayload()[6]; 
    array[1] = response.getDataPayLoad()[7]; 
    Array.Reverse(array); 
//end-or 

    short myVar = BitConverter.ToInt16(array, 0); 

    int myInt = (int)myVar; 
    double myDouble = (double)myVar; 

由於2個字節是一個短的(16位整數),這就是你從傳感器中得到的東西。然後,您可以將其轉換爲完整的32位整數或雙精度,如果需要的話。

字節交換爲字節序。

+3

更好地交換你填寫數組的方式,'BitConverter'是小端。 –

+0

謝謝,糾正。 @BenVoigt –

+0

只是一個味道問題,但對我來說'int myInt =(int)myVar; double myDouble =(double)myVar;'看起來過於明確。我會使用'int myInt = myVar; double myDouble = myVar;'或var myInt =(int)myVar; var myDouble =(double)myVar;'。當然,得到的字節碼是一樣的。 –