[英]Convert list<int[]> to byte[]
如何將list<int[]>
轉換為byte[]
?
我可以用這個:
byte[] bytes = lista.SelectMany(BitConverter.GetBytes).ToArray();
但是它僅適用於list<int>
。 如果您有什么想法-最有效的方法就是歡迎。
這個怎么樣:
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();
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);
}
}
如果您故意使用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();
var result = lista.SelectMany(x => x.SelectMany(y => BitConverter.GetBytes(y))).ToArray();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(list);
byte[] bytes = bos.toByteArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.