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



hi我有这种阵列

int[] arrayint = new int[32];

它包含

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

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

byte[] streambit;

并且应该与数组值相同

我想像这样输出

streambit[0] = 99
streambit[1] = 121
streambit[2] = 99
streambit[3] = 66
...
streambit = arrayint.Select(i => (byte)i).ToArray();

只需确保您的值不大于255。

没有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毫秒

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

最新更新