使用填充将字节数组转换为int数组

时间:2013-12-23 10:32:01

标签: c# .net arrays byte

我知道我可以使用以下内容将字节数组转换为int数组:

int[] bytesAsInts = yourBytes.Select(x => (int)x).ToArray();

如何将字节数组转换为固定大小的int数组,并用0x00填充剩余的数组?

例如,我的字节数组是10个字节,我想创建一个长度为14的int数组。代码应该转换我的字节数组的10个字节,并用0x00

4 个答案:

答案 0 :(得分:5)

为自己写一个可重复使用的扩展方法,可以填充序列:

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();

这适用于序列上单个线性传递的任何类型的序列。它也很懒惰。通过抽象填充序列的问题,可以消除从主算法中执行填充的复杂性。它现在隐藏在其他一些人无需关心的地方。考虑到不重要的细节会导致代码干净,因为所有复杂性都隐藏在明确定义的界面背后。

答案 1 :(得分:1)

int[] array = new int[14];
bytesAsInts.CopyTo(array, 4);

答案 2 :(得分:1)

也许不是最可读,但oneliner:)

int[] bytesAsInts = yourBytes.Select(x => (int)x)
         .Concat(Enumerable.Repeat(0,14-yourBytes.Length)).ToArray();

答案 3 :(得分:0)

@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;
}