将Array顶部的Array附加到指定的长度

时间:2016-12-09 08:21:48

标签: c# arrays

我已经创建了一个函数,可以将一个数组附加到指定长度的顶部。我遇到的唯一问题是当数组是一个奇数,比如说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

2 个答案:

答案 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个(余数)字节复制到数组的最后位置。