繁体   English   中英

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

[英]Convert a byte array to int array with padding

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

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

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

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

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

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

通过序列上的单个线性传递,该方法可用于任何类型的序列。 这也很懒。 通过抽象填充序列问题,您可以从主算法中消除执行填充的复杂性。 现在它被隐藏在其他任何人都不必关心的地方。 剔除不重要的细节会导致代码简洁,因为所有复杂性都隐藏在一个定义明确的接口后面。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM