我知道我可以一个字节数组转换为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#中,获取未初始化的数组并不简单,我认为... –