如何将int数组值复制到字节数组中?只复制C#中的值

时间:2012-08-30 11:20:00

标签: c# arrays integer bytearray

嗨我有这种数组

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
...

3 个答案:

答案 0 :(得分:5)

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

确保您没有超过255的值。

答案 1 :(得分: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毫秒

答案 2 :(得分:0)

streambit=arrayint.Where(x=>x>=0&&x<=255).Select(y=>(byte)y).ToArray();