我知道我可以一個字節數組轉換爲int數組有以下:轉換爲字節數組爲int數組填充
int[] bytesAsInts = yourBytes.Select(x => (int)x).ToArray();
我如何轉換一個字節數組到一個固定大小的int數組並用0x00
填充其餘部分?
例如,我的字節數組是10個字節,我想創建長度爲14的int數組的代碼應該轉換爲10個字節我的字節數組,並墊其餘4 0x00
我知道我可以一個字節數組轉換爲int數組有以下:轉換爲字節數組爲int數組填充
int[] bytesAsInts = yourBytes.Select(x => (int)x).ToArray();
我如何轉換一個字節數組到一個固定大小的int數組並用0x00
填充其餘部分?
例如,我的字節數組是10個字節,我想創建長度爲14的int數組的代碼應該轉換爲10個字節我的字節數組,並墊其餘4 0x00
寫自己可重複使用的擴展方法,可以墊一個序列:
static IEnumerable<T> AppendPadding(this IEnumerable<T> items, int totalCount, T paddingItem) {
int count = 0;
foreach (var item in items) {
yield return item;
count++;
}
for (int i = count; i < totalCount; i++)
yield return paddingItem;
}
而且使用這樣的:
int[] bytesAsInts = yourBytes.Select(x => (int)x).AppendPadding(14, 0).ToArray();
這適用於任何類型的序列與罪gle線性遍歷序列。它也很懶。抽象化填充序列的問題可以消除主算法中填充的複雜性。它現在隱藏在其他沒有人關心的地方。分解不重要的細節導致乾淨的代碼,因爲所有的複雜性都隱藏在一個定義良好的界面之後。
int[] array = new int[14];
bytesAsInts.CopyTo(array, 4);
也許不是最可讀的,但oneliner :)
int[] bytesAsInts = yourBytes.Select(x => (int)x)
.Concat(Enumerable.Repeat(0,14-yourBytes.Length)).ToArray();
@usr肯定有一個偉大的答案。這是另一種方式,並不健壯。但是解釋了對任何語言都有用的邏輯,它們以自己的方式實現。這裏可以通過輸入來設置desiredSize
。
int desiredSize = 14;
int[] myArray = new int[desiredSize ];
for(int i = 0; i < myArray.Length; i++)
{
if(i <= yourBytes.Length)
myArray[i] = (int)yourBytes[i];
else
myArray[i] = 0x00;
}
這很有吸引力(快),但你沒有做填充(調零)和填充最後10個,而不是第一個。 –
你的權利,但int無論如何將有價值0。或者我錯過了什麼? – garf1eld
@陣列的@HenkHolterman尾部將填充零。在C#中,獲取未初始化的數組並不簡單,我認爲... –