Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/40: Рейтинг темы: голосов - 40, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 35

Чтение строки из бинарного файла

29.05.2019, 11:43. Показов 9913. Ответов 90
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, столкнулся с проблемой следующего рода: читаю dat файл, все читает нормально, пока дело не доходит до ReadString. Почему-то, вместо одной строки, он перепрыгивает и читает несколько. Я знаю длину, строки - равна 20 байтам. Как использовать длину, что бы все правильно читало?
C#
1
2
3
4
5
6
7
8
9
{
                   byte length = br.ReadByte();
                Console.WriteLine("Длинна надписи: " + length);
                string fieldName = br.ReadString();//вот от-сюда собственно и начинает проблема
                Console.WriteLine("Надпись: " + fieldName);
                byte type = br.ReadByte();
                Console.WriteLine(" Размер шрифта: " + type);
                
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.05.2019, 11:43
Ответы с готовыми решениями:

Чтение бинарного файла
проблема с чтением бинарного файла. если сделать так: byte buf_data = new byte; file.Read(buf_data, 0, 10); то в таком случае...

Чтение бинарного файла
Добрый день, подскажите как реализовать код. Имеется структура бинарного файла (не моего) нужно его прочесть. Структура: ...

Некорректное чтение из бинарного файла
Здравствуйте У меня следующая ситуация: 1) Создаю бинарный файл using (FileStream stream = new...

90
Эксперт .NET
 Аватар для Rius
13831 / 7904 / 1708
Регистрация: 25.05.2015
Сообщений: 24,004
Записей в блоге: 14
30.05.2019, 12:14
Студворк — интернет-сервис помощи студентам
Muhusii, Right set length откуда берётся? Не из файла читается?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
30.05.2019, 12:15
Цитата Сообщение от Muhusii Посмотреть сообщение
если я помещу это в цикл, то он будет выводить пустую строку во всех случаях
У вас выше было Right set length: 0, это откуда?
0
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 35
30.05.2019, 12:23  [ТС]
Rius,Someone007, Да, из фала. Вот по-этому я и говорю что проблема. Потому что здесь, Right set length: 0, и получается Right set должна быть пустой. В другом случаем, Right set length: 3 и строка Right set
Изображения
 
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
30.05.2019, 12:26
Цитата Сообщение от Muhusii Посмотреть сообщение
Да, из фала. Вот по-этому я и говорю что проблема.
Не вижу проблемы подставить в Take прочитанное из файла значение длины...
0
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 35
30.05.2019, 12:32  [ТС]
Someone007, вот в чем проблема. Если я ставлю
C#
1
2
 var rightSet = br.ReadBytes(100);
 Console.WriteLine("Right Set: {0}", string.Join(" ", rightSet.Take(3).Select(x => x.ToString("x2"))));
И запускаю цикл, то получается следующее. Либо, придется делать для каждой структуры свой класс, что было бы проще, но мне не очень хочется.
Миниатюры
Чтение строки из бинарного файла  
0
Эксперт .NET
 Аватар для Rius
13831 / 7904 / 1708
Регистрация: 25.05.2015
Сообщений: 24,004
Записей в блоге: 14
30.05.2019, 12:33
Цитата Сообщение от Muhusii Посмотреть сообщение
Right set length: 0, и получается Right set должна быть пустой
Right set length получается 0, в Take() попадает 0, Right set получается "". Тоже не вижу проблемы...
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
30.05.2019, 12:34
Повторяю:
Цитата Сообщение от Someone007 Посмотреть сообщение
Не вижу проблемы подставить в Take прочитанное из файла значение длины...
Так же не вижу у вас подставленного в Take прочитанного из файла значения длины... В место этого вы зачем-то ставите константное значение и потом говорите что не работает...
0
Эксперт .NET
 Аватар для Rius
13831 / 7904 / 1708
Регистрация: 25.05.2015
Сообщений: 24,004
Записей в блоге: 14
30.05.2019, 12:35
Muhusii, считали длину в переменную и эту переменную передали в Take().
0
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 35
30.05.2019, 12:38  [ТС]
Rius, Someone007, О боже, я понял что вы мне объясняли. Спасибо большое за помощь и за терпение.
0
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 35
30.05.2019, 13:02  [ТС]
Rius, Someone007, Мне уже стыдно просить. Почему terminal вместо 2С, выдает 2?
C#
1
2
 string terminal = Encoding.ASCII.GetString(br.ReadBytes(25));
 Console.WriteLine("terminal:" + terminal);
Миниатюры
Чтение строки из бинарного файла  
Изображения
 
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
30.05.2019, 13:21
Цитата Сообщение от Muhusii Посмотреть сообщение
Почему terminal вместо 2С, выдает 2?
Почему 2С если в файле другое значение? А символ ? потому что у вас консоль не настроена на вывод таких символов (кодировка/шрифт и т.д. не соответствует)
0
Эксперт .NET
 Аватар для Rius
13831 / 7904 / 1708
Регистрация: 25.05.2015
Сообщений: 24,004
Записей в блоге: 14
30.05.2019, 13:26
Muhusii, откуда там взялся символ с кодом выше 0x7f?
0
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 35
30.05.2019, 13:30  [ТС]
Rius, Без малейшего понятия. Мне просто дали этот файл и сказали разобрать. И в помощь пару файлов.
Someone007, Как написано в файле(который служит для помощи), там значение должно быть 2С
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
30.05.2019, 13:31
Цитата Сообщение от Rius Посмотреть сообщение
откуда там взялся символ с кодом выше 0x7f?
Кстати да, такой символ в указанную кодировку (ASCII) наверно не входит, поэтому и заменяется на ?.

Добавлено через 1 минуту
Цитата Сообщение от Muhusii Посмотреть сообщение
там значение должно быть 2С
Но вы же сами видите что там нет 2С, верно?
0
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 35
30.05.2019, 13:32  [ТС]
Someone007, Пробовал ставить другие кодировки, тоже не вариант.
0
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 35
30.05.2019, 13:34  [ТС]
Someone007, однако тут
Миниатюры
Чтение строки из бинарного файла  
0
Эксперт .NET
 Аватар для Rius
13831 / 7904 / 1708
Регистрация: 25.05.2015
Сообщений: 24,004
Записей в блоге: 14
30.05.2019, 13:46
"С" в кодировке windows-1251 имеет код 0xD1.
C#
1
Encoding.GetEncoding("windows-1251").GetString(br.ReadBytes(25));
Добавлено через 1 минуту
Цитата Сообщение от Rius Посмотреть сообщение
Через кодировку ASCII, вероятно, если все эти имена только на латинице
А у вас русская заглавная С. Откуда?

Добавлено через 5 минут
Т.е., видимо, кто-то дал. А вы не знали, что там русский текст есть?)
0
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 35
07.06.2019, 15:35  [ТС]
Rius,
Так и есть, грубо говоря.
Снова здравствуйте. У меня снова вопрос появился вопрос. Теперь, мне нужно сериализовать полученные данные в json. Может, подскажите как это сделать?

Добавлено через 29 минут
Someone007, Может быть, вы подскажете?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
07.06.2019, 15:40
Создаете POCO класс, в него пихаете свои данные, сериализуете объект созданного класса с помощью JsonConvert.SerializeObject из nuget пакета Newtonsoft.Json...
0
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 35
10.06.2019, 13:45  [ТС]
Someone007, т.е. мне нужно создать ещё один такой класс и присвоить ему данные из дисериализации?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Data
    {
        
         public bool filledRecord;
        public UInt16 fieldsFlags;
        public UInt32 groupID;
        public UInt32 userID;
        public byte nameLength;
        public string name;
        public bool hidden;
        public byte rSetlength;
        public string rightSet;
        public byte hashLength;
        public string hashCode;
        public byte companyLength;
        public string company;
        public byte airportLength;
        public string airport;
        public byte terminalLength;
        public string terminal;
        public byte checkSum8;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.06.2019, 13:45

Чтение структуры из бинарного файла
Всем добрый день, столкнулся с проблемой чтения структур из бинарного файла, много чего нового узнал и много в чем еще не разобрался, ниже...

Чтение из бинарного файла в структуру
Совсем недавно начал изучать C# и .NET до этого программировал на C++. Хотел узнать можно ли через прямое обращение к памяти считать данные...

Чтение значений из бинарного файла
Здравствуйте! И вот, опять, прошу помощи у сообщества :-Вот здесь). Не могли бы вы, пожалуйста, подсобить примером кода (я прошу...

Чтение и запись бинарного файла
Помогите объяснить и переделать не большую программу с VB6 , на C#. А то перечитал много книг , но все равно некоторые моменты никак не...

Чтение бинарного файла по заголовкам
Здравствуйте. Файл начинается так 00 00 00 00 FF FF 95 05 34 E8 02 00 CD 67 5A 41 первые 4 байта это номер записи потом 2 байта - номер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru