2012-07-05 367 views
1

可以說我有一個這樣定義的字節數組:C#結合字節數組,並轉換爲16位整數

byte[] byteArray = { 0x08, 0x00 }; 

我需要的元素數組中結合起來,創造:

0x0800 

然後再轉換爲int:

2048 

事情是這樣的:

private static int GetMessageType(byte[] byteArray) 
    { 
     if(byteArray.Length != 2) 
      throw new ArgumentOutOfRangeException("byteArray"); 

     throw new NotImplementedException(); 
    } 
+0

兩個字節不會形成Int32 ...您希望在此處進行哪些轉換規則? – 2012-07-05 22:29:54

+0

0到15位是Int16,16到31位是0。因此,0x0800將是:0000 0000 0000 0000 0000 1000 0000 0000 – aelstonjones 2012-07-05 22:42:37

回答

4

爲什麼不使用簡單的按位運算符?例如

byte hiByte = byteArray[0]; // or as appropriate 
byte lowByte = byteArray[1]; 
short val = (short)((hiByte << 8) | lowByte); 

在這種情況下所述按比特的結果被處理爲[簽名]一個short(以下標題?),並可能導致負的值,但根據需要通過僅移除鑄件可以被修改..

+0

謝謝,這就是我一直在尋找的。 – aelstonjones 2012-07-05 22:56:09

+1

有[完整示例](http://ideone.com/Cdvzw)。 – 2012-07-05 23:01:34

1

您應該使用BitConverter.ToInt16,但看起來您希望進行BigEndian轉換。所以使用Jon Skeet的EndianBitConverterhttp://www.yoda.arachsys.com/csharp/miscutil/

+0

我在Jon Skeets .dll上使用了一個反編譯器,它看起來像他的EndianBitConverter使用了pst建議的相同的按位運算。 – aelstonjones 2012-07-05 22:57:31

+0

@aelstonjones:是的,但當你再次看到它時,更明確一些。 – 2012-07-05 23:03:11