如何将plus
转换为list<int[]>
?
我可以用这个:
byte[]
但它仅适用于 byte[] bytes = lista.SelectMany(BitConverter.GetBytes).ToArray();
。如果你的想法很少 - 欢迎最有效率。
答案 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();