2012-05-22 52 views
0

这个问题是这样Question如何用0xFF字节填充一个字节[]?

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

任何人都可以请清除,为什么这是行不通的?

+0

产生此“问题”的Count值的最小值是多少? –

回答

4

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

最有可能你想使用MemoryStream.ToArray(),而不是返回被截断为实际长度的缓冲区副本。

+0

你说得对!谢谢它工作!谢谢! – Writwick

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; 
} 
+0

这是不正确的!如果你读了另一个问题,你会发现我想在自己的内容后填充流。[设置位置的最佳方法是'MS.Seek(0,SeekOrigin.Begin)'] – Writwick