2012-05-22 6 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

Смежные вопросы