我已经创建了一个函数,可以将一个数组附加到指定长度的顶部。我遇到的唯一问题是当数组是一个奇数,比如说9,并且我试图得到它的长度,例如20,它最后会输出2个零。我确信有一种方法可以让每个字节填充数组。
当前功能:
public static byte[] AppendToLen(byte[] input, int length)
{
byte[] output = new byte[length];
if (length <= input.Length) return null;
for (int i = 0; i < length / input.Length; i++)
Array.Copy(input, 0, output, input.Length * i, input.Length);
return output;
}
字节块
byte[] Block = new byte[0x10] { 0x02, 0x03, 0xFF, 0x04, 0x61, 0x37, 0x5f, 0xe8, 0x19, 0x70, 0xa2, 0x77, 0x8c, 0x94, 0x89, 0xb4 };
一个例子是:
foreach(byte bit in AppendToLen(Block, 56)) {
Console.WriteLine(bit.ToString("X2"));
}
Ouput: 0203FF0461375FE81970A2778C9489B40203FF0461375FE81970A2778C9489B40203FF0461375FE81970A2778C9489B40000000000000000
答案 0 :(得分:2)
在上面的示例中,您只迭代两次,因为length / input.Length
项向下舍入为2.请记住,这是整数除法。另外,切记不要离开阵列的末端。下面的代码段可以满足您的需求。
public static byte[] AppendToLen(byte[] input, int length)
{
byte[] output = new byte[length];
if (length <= input.Length) return null;
// Just use offset here since that's what you care about
for (int offset = 0; offset < length; offset += input.Length)
// Copy as much of the input array as possible to the output,
// starting at this iteration's offset
Array.Copy(input, 0, output, offset, Math.Min(length - offset, input.Length));
return output;
}
答案 1 :(得分:1)
问题是您没有为余数字节分配任何值。在您的示例中,56%16 = 8,因此在循环结束后,如果没有初始化,则剩下8个字节。现在,您想要填充我不知道的方式,可能是输入数组中的前8个字节。如果是这样,您需要在循环后添加额外的检查以查看余数是否> 0,并将这8个(余数)字节复制到数组的最后位置。