2014-09-24 39 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;