将Double转换为Short再转换为Byte

3
我需要将一个Double[]转换成Short[]再转化为Byte[]
我首先将其转换为Short,因为Double有太多位,如果我直接转换为Bytes,会得到空白字节。
一开始,我有一个名为wavPuroDerDouble[],其中装满了信息。
    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]; 

我不能使这个数组变得更大...

能有人帮忙吗?谢谢!

(对不起,我的英语不好,它不是我的母语)


你不应该使用 new short[100000000],因为你分配的内存要比实际需要的多得多,并且它将被放置在大对象堆上。你应该使用 new short[doble.length] 来替代。 - Rhys Bevilaqua
1个回答

0

你可以使用 LINQ 来简化所有这些:

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

(注:只需确保您使用了using System.Linq;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接