Converting a list of ints to a byte array

久未见 提交于 2019-12-01 16:16:13

Since you don't want a byte[][] where each integer maps to an array of four bytes, you cannot call ConvertAll. (ConvertAll cannot perform a one-to-many conversion)

Instead, you need to call the LINQ SelectMany method to flatten each byte array from GetBytes into a single byte[]:

integers.SelectMany(BitConverter.GetBytes).ToArray()

How about

var bytes = integers.Select(i => BitConverter.GetBytes(i)).ToArray();

totally untested BTW, but seems reasonable.

This should actually give you an Array of arrays of bytes...which may or may not be what you need. If you want to collapse it into a single array, you can use SelectMany

var bytes = integers.SelectMany(i => BitConverter.GetBytes(i)).ToArray();

The ConvertAll method is flawed because it expects there to be a 1:1 mapping from the source to the destination. This is not true when converting integers to bytes. You are much better off going with a solution such as what @SLaks has suggested with the SelectMany extension method.

Adrian Regan

To use the ConvertAll method you can do the following...

Assuming that you have a list of ints that are really byte values and you do not actually want the bytes required to make up an int, i.e. byte[][]:

public static class Utility {

   public static byte IntToByte(int i) {
       if(i < 0)
           return (byte)0;
       else if(i > 255)
           return (byte)255;
       else
           return System.Convert.ToByte(i);
   }
}

... to convert ...

byte[] array = listOfInts.ConvertAll(
                    new Converter<byte, int>(Utility.IntToByte) ).ToArray();

or you could use an anonymous delegate...

byte[] array = listOfInts.ConvertAll( new Converter<byte, int>(
                   delegate(int i) {
                       if(i < 0)
                          return (byte)0;
                       else if(i > 255)
                          return (byte)255;
                       else
                          return System.Convert.ToByte(i);
                   })).ToArray();
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!