将list <int []>转换为byte []

时间:2016-01-19 18:59:03

标签: c# .net

如何将plus转换为list<int[]>

我可以用这个:

byte[]

但它仅适用于 byte[] bytes = lista.SelectMany(BitConverter.GetBytes).ToArray(); 。如果你的想法很少 - 欢迎最有效率。

5 个答案:

答案 0 :(得分:5)

这个怎么样:

byte[] bytes =
    lista
    .SelectMany(x => x)
    .SelectMany(BitConverter.GetBytes)
    .ToArray();

<强>更新

要将结果转换为List<int>,您可以执行以下操作:

List<int> list =
    bytes
        .Select((item, index) => new {item, index})
        .GroupBy(x => x.index/4)
        .Select(g => g.Select(x => x.item).ToArray())
        .Select(x => BitConverter.ToInt32(x, 0))
        .ToList();

答案 1 :(得分:1)

        var listOfIntArray = new List<int[]>
        {
            new[] {1, 2, 3},
            new[] {4, 5},
            new[] {6}
        };

        var listOfBytes = new List<byte>();

        foreach (var intArray in listOfIntArray)
        {
            var listOfByteArray = intArray.Select(BitConverter.GetBytes);

            foreach (var byteArray in listOfByteArray)
            {
                listOfBytes.AddRange(byteArray);
            }
        }

答案 2 :(得分:1)

如果你故意使用BitConverter,你可以使用它(将分别输出整数的所有4个字节)

byte[] buffer = testData.SelectMany(arr => arr.SelectMany(x => BitConverter.GetBytes(x))).ToArray();

为了完整起见:

List<int> reversed = Enumerable.Range(0, buffer.Length / 4)
                               .Select(x => BitConverter.ToInt32(buffer, x * 4))
                               .ToList();

正如在Yacoub Massad的回答中一样,这将在List<int>而不是List<int[]>中反转,因为首先展开List<int[]>我们会丢失数组的长度信息。

如果您只想将int值转换为字节,则可以使用此

byte[] buffer = testData.SelectMany(arr => arr.Select(x => (byte)x)).ToArray();

答案 3 :(得分:1)

var result = lista.SelectMany(x => x.SelectMany(y => BitConverter.GetBytes(y))).ToArray();

答案 4 :(得分:0)

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(list);
byte[] bytes = bos.toByteArray();