Из MemoryStream читается мусор
Исходные данные: 0xaa, 0xff, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
При чтении: 0x3F, 0x3F, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x3F
Предположительно большие значения дают это.
using System.Text;
namespace MyApp
{
class Program
{
static void Main(string[] args)
{
using (MemoryStream stream = new MemoryStream(9))
{
StreamWriter writer = new StreamWriter(stream);
StreamReader reader = new StreamReader(stream);
writer.Write(Encoding.ASCII.GetString(new byte[] { 0xaa, 0xff, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }));
byte[] buffer = new byte[10];
writer.Flush();
stream.Seek(0, SeekOrigin.Begin);
stream.Read(buffer, 0, buffer.Length);
Console.WriteLine(BitConverter.ToString(buffer));
}
}
}
}
Ответы (1 шт):
Автор решения: Lesha Vel
→ Ссылка
Ответ был прост, System.Encoding.ASCII.GetString портит байты, корректный код выглядит так
using System.Text;
namespace MyApp
{
class Program
{
static void Main(string[] args)
{
using (MemoryStream stream = new MemoryStream(9))
{
StreamWriter writer = new StreamWriter(stream);
// writer.Write(Encoding.UTF8.GetString(new byte[] { 0xaa, 0xff, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }));
byte[] writeBuf = new byte[] { 0xaa, 0xff, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
stream.Write(writeBuf);
byte[] buffer = new byte[10];
writer.Flush();
stream.Seek(0, SeekOrigin.Begin);
stream.Read(buffer, 0, buffer.Length);
Console.WriteLine(BitConverter.ToString(buffer));
}
}
}
}