2014-09-24 57 views
2

我需要一個Double[]轉換爲Short[]Byte[]雙轉換到短到字節

我轉換到短首先,由於Double有許多位,所以如果我直接將其轉換爲Bytes我會得到空字節。

Intially我有一個名爲Double[]充滿wavPuroDer與信息

short[] wavShortDer = ConvertToShort(wavPuroDer); 
    byte[] wavByteDer = ConvertToByte(wavShortDer); 

    public static short[] ConvertToShort(double[] doble) 
    { 
     short[] shorty = new short[100000000]; 
     for (int i = 0; i < doble.Length; i++) 
     { 
     shorty[i]=Convert.ToInt16 (doble[i]); 

     } 
     return shorty; 
    } 


     public static byte[] ConverToByte(short[] shorty) 
    { 
     byte[] bytey = new byte[1000000000]; 
     int j = 0; 
     for (int i = 0; i < shorty.Length; i++) 
     { 
      byte[] byteArray = BitConverter.GetBytes(shorty[i]); 
      bytey[j] = byteArray[0]; 
      bytey[j+1] = byteArray[1]; 
      j = j + 2; 
     } 


     return bytey; 
    } 

我的問題是,IM在該行獲得一個System.IndexOutOfRangeException

bytey[j] = byteArray[0]; 

,我不能讓這個陣列中的任何較大...

有人可以幫忙嗎? 謝謝!

(對不起我的英語不好,它沒有我的主要語言) `

+0

你不應該使用'new short [100000000]'你分配WAY的內存超過了必要的數量,它會被放在大對象堆上。你應該做'新的短[doble.length]'而不是 – 2014-09-24 05:03:29

回答

1

你可以使用LINQ來簡化這一切:

byte[] wavByteDer = wavPuroDer.Select(x => Convert.ToInt16(x)) 
           .SelectMany(x => BitConverter.GetBytes(x)) 
           .ToArray(); 

(注:只要確保你有using System.Linq;