1

嗨我有这种数组

int[] arrayint = new int[32];

它包含

arrayint[0] = 99
arrayint[1] = 121
arrayint[2] = 99
arrayint[3] = 66
...

有没有一种简单的方法可以将该整数数组复制到一个字节数组中,就像我想要制作这个字节数组一样

byte[] streambit;

它应该与arrayint值相同

我想成为这样的输出

streambit[0] = 99
streambit[1] = 121
streambit[2] = 99
streambit[3] = 66
...
4

3 回答 3

5
streambit = arrayint.Select(i => (byte)i).ToArray();

只需确保您没有大于 255 的值。

于 2012-08-30T11:21:34.583 回答
2

没有 LINQ(例如,在针对 .Net 2.0 时很有用):

byte[] bytearray = Array.ConvertAll<int, byte>(arrayint, (z) => (byte)z);

嗯,是的,比 LINQ 快得多:

测试代码(可以改进,但这给出了一个想法):

private static void Main(string[] args)
{
    int[] arrayint = new int[40000];

    arrayint[0] = 99;
    arrayint[1] = 157;
    arrayint[2] = 1;
    arrayint[3] = 45;

    byte[] bytearray;

    Stopwatch sw = Stopwatch.StartNew();
    for (int i = 0; i < 10000; i++)
    {
        bytearray = Array.ConvertAll<int, byte>(arrayint, (z) => (byte)z);
    }

    sw.Stop();
    Console.WriteLine("ConvertAll took {0} ms", sw.ElapsedMilliseconds);

    sw = Stopwatch.StartNew();
    for (int i = 0; i < 10000; i++)
    {
        bytearray = arrayint.Select(z => (byte)z).ToArray();
    }

    sw.Stop();
    Console.WriteLine("LINQ took {0} ms", sw.ElapsedMilliseconds);

    Console.ReadLine();
}

结果:

ConvertAll 花了 1865 毫秒

LINQ 耗时 6073 毫秒

于 2012-08-30T11:35:42.163 回答
0
streambit=arrayint.Where(x=>x>=0&&x<=255).Select(y=>(byte)y).ToArray();
于 2012-08-30T11:32:35.920 回答