如何用 0xFF 个字节填充一个字节 []

本文关键字:字节 一个 填充 何用 0xFF | 更新日期: 2023-09-27 18:34:49

这个问题是这个问题的后续

我写了一个小方法来填充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

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

如何用 0xFF 个字节填充一个字节 []

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

最有可能的是,您希望使用 MemoryStream.ToArray(( 来返回截断为实际长度的缓冲区副本。

这是现在流中的位置。使用质谱。写入前位置 = 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;
}