嗨我有这种数组
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
...
答案 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();