• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Поясните кто знает C#

  • Автор темы fedrom
  • Дата начала
F

fedrom

Подскажите кто-нить...
Понадобилась программка которая записывала бы данные в файл побайтно(данные разных типов, int, double,bool и т.д.). Начал разработку в VStudio2008 на языке C#... данный файл потом испльзуется как ини файл для программы на Java в модеме Siem TC65 почему именно побайтно..., потому что нет в библиотеке этого модема работы с файлами на его flash памяти другого типа... Проблема в след-м .. при использованиии в C# BinaryWriter... получил в файле данные записанные младшим байтом вперед... а вот программа в модеме считывает старшим байтом вперед...
чтоб понятнее было ... например записал я int n=60; получил в файле последовательность из 4 байт (3С 00 00 00)hex а вот при записи того же числа программой в модеме получил содержимое файла (00 00 00 3С)hex ...
Подскажите кто работал много с байтовыми потоками... как проще сделать чтоб не переставлять местами искуственными циклами байты перез записью в в поток... работать приходится с байтами разных типов
 
M

mr_ST

Реализуй свой BigEndianBinaryWriter который будет переворачивать байты в нужном порядке. Это не сложно. Будет что-то типа:
Код:
public class BigEndianBinaryWriter : IDisposable
{
private const int MaxDataWidth = 8;
private Stream _OutStream;
private byte[] _Buffer = new byte[MaxDataWidth];

protected BigEndianBinaryWriter()
{
}

public BigEndianBinaryWriter(Stream output)
{
_OutStream = output;
}


protected virtual void Dispose(bool disposing)
{
if (disposing)
{
this._OutStream.Close();
}
}

public virtual void Write(short value)
{
_Buffer[0] = (byte)(value >> 8);
_Buffer[1] = (byte)value;
_OutStream.Write(_Buffer, 0, 2);
}

// Реализацию Write для других типов пишем сами;)

public virtual Stream BaseStream
{
get { return _OutStream; }
}
}
 
M

mr_ST

А если попробовать писать не как инт а как масив байт?

BinaryWriter как раз и занимается тем что преобразует int и т.д. в массив байт. Гораздо разумнее сделать свою реализацию BinaryWriter чем каждый раз мудохаться с преобразованием в массив байт.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!