如何用0xFF字节填充byte []?

时间:2012-05-22 02:25:46

标签: c# bytearray padding

此问题是此Question

的后续问题

我写了一个小方法来填充byte[]就像MemoryStream

public static Stream FillWithPadding(Stream MS, int Count)
{
    byte[] buffer = new byte[64];
    for (int i = 0; i < buffer.Length; i++)
    {
        buffer[i] = 0xFF;
    }
    while (Count > buffer.Length)
    {
        MS.Write(buffer, 0, buffer.Length);
        Count -= buffer.Length;
    }
    MS.Write(buffer, 0, Count);
    return MS;
}

public static byte[] FillWithPadding(byte[] Buffer, int Count)
{
    using (MemoryStream MS = new MemoryStream())
    {
        MS.Write(Buffer, 0, Buffer.Length);
        MemoryStream msw = FillWithPadding(MS, Count) as MemoryStream;
        return msw.GetBuffer();
    }
}

此代码无效!!

相反,它会在最后创建0xFF + 0x00

任何人都可以清理,为什么这不起作用?

2 个答案:

答案 0 :(得分:4)

MemoryStream.GetBuffer()返回MemoryStream用于存储数据的内部字节数组。最初它填充0,并通过Write's填充到流长度。

很可能你想使用MemoryStream.ToArray()代替将截断的缓冲区副本返回到实际长度。

答案 1 :(得分:0)

这就是Stream Now中的位置。 在写入之前使用MS.Position = 0.

public static Stream FillWithPadding(Stream MS, int Count)
{
    byte[] buffer = new byte[64];
    for (int i = 0; i < buffer.Length; i++)
    {
        buffer[i] = 0xFF;
    }
    MS.Position = 0;
    while (Count > buffer.Length)
    {
        MS.Write(buffer, 0, buffer.Length);
        Count -= buffer.Length;
    }
    MS.Write(buffer, 0, Count);
    return MS;
}