将Double转换为Short到Byte

时间:2014-09-24 04:21:15

标签: c# arrays byte short

我需要将Double[]转换为Short[]Byte[]

我首先转换为short,因为Double有很多位,所以如果我将它直接转换为Bytes,我将得到空字节。

我最初有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;
    }

我的问题是,我在行中获得了System.IndexOutOfRangeException

bytey[j] = byteArray[0]; 

我不能让这个数组更大......

有人可以帮忙吗?  谢谢!

(抱歉我的英语不好,不是我的主要语言) `

1 个答案:

答案 0 :(得分:1)

您可以使用linq简化所有这些:

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

(注意:请确保您拥有using System.Linq;