2011-12-29 80 views
0

好吧,我試圖轉換一個字節[]爲短[],或Int16 []。轉換字節[]爲簡短[]

List<Int16[]> lol = new List<Int16[]>(); 
byte[] b = System.Text.Encoding.Default.GetBytes("lolololololololololololoolol"); 
lol.Add(Convert.ToInt16(b)); 

MessageBox.Show(Encoding.Default.GetString(Encoding.Default.GetBytes(lol[0]))); 

這是我試過的東西,但很明顯,它不起作用。那麼我怎麼做到這一點?

+1

2件事:它做了什麼,而不是工作,你能告訴我們轉換的預期結果是什麼?哦,還有第三件事:你的代碼正在創建一個短褲陣列列表。也許你想'List '而不是'List '。 – phoog 2011-12-29 23:54:16

+0

[有效轉換音頻字節 - 字節\ [\]以縮短\ [\]](http://stackoverflow.com/questions/5728865/efficiently-convert-audio-bytes-byte-to- short) – 2011-12-29 23:59:48

回答

0

你必須通過字節數組,並轉換每個元素。

List<Int16[]> lol=new List<Int16[]>(); 
byte [] b=System.Text.Encoding.Default.GetBytes("lolololololololololololoolol"); 
Int16 [] a=new Int16 [b.Length]; 
for (Int32 i=0;i<a.Length;++i) { 

    a[i]=Convert.ToInt16(b[i]); 

} 
lol.Add(a); 
+0

這將每個8位變成一個短路。但短小是16位。 – 2011-12-31 02:59:22

+0

我很清楚。他從來沒有說過要將每個2字節的數據集合到Int16中。 – 2011-12-31 03:39:31

0

你可能想要BitConverter.ToInt16(),你需要爲每對字節調用。

或者,使用Buffer.BlockCopy立即執行(使用機器的本機字節順序)。

+0

我用Buffer.BlockCopy得到了它。謝謝! – Banksy 2011-12-31 02:57:51

0
 byte[] by = new byte[5]; 
     short[] sh = new short[5]; 
     by[0] = 0x1; 
     by[1] = 0x2; 
     by[2] = 0x3; 
     by[3] = 0x4; 
     by[4] = 0x5; 

     for (int x = 0; x < sh.GetLength(0); x++) 
     { 
      sh[x] = by[x]; 
      MessageBox.Show(by[x].ToString()); 

這對我有效。不知道我是否有誤解。

+0

這將每個8位變成一個短路。但短小是16位。 – 2011-12-31 03:00:24

1

它在我看來就像你想在一行中轉換整個數組。它可以這樣做:

List<Int16[]> lol = new List<Int16[]>(); 
byte[] b = System.Text.Encoding.Default.GetBytes("lolololololololololololoolol"); 
lol.Add(Array.ConvertAll(b, x => Convert.ToInt16(x))); 
+1

這將每個8位變成一個短。但短小是16位。 – 2011-12-31 03:00:10

+0

這是正確的,本質上是要求:「嘗試將字節[]轉換爲短[]或Int16 []」。 – 2012-01-05 19:16:39

+0

通常所期望的是將兩個字節變成一個短。或者至少這更容易產生一個問題,因爲把一個字節變成一個簡單的東西很容易。 – 2012-01-05 19:54:00