|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.06.2012, 11:52 | #1 |
Пользователь
Регистрация: 27.07.2009
Сообщений: 22
|
fread и бинарное чтение файла
Всем добрый день.
Прошу помощи у знатоков в решении проблемы)) При считывании файла в бинарном режиме(содержимое файла жирным): 50 49 43 40 50 23 00 4A 50 47 00 00 FF D8 FF E0 00 10 fread считывает как то непонятно(или я не правильно делаю) Вместо: PIC @P# выводит PIC@P# @P# почему в TFrame.id "записалось" содержимое след. 3 байт? витчер среды ХЕ2 отображает нормально но почему при выводе и использовании я зачем то получаю и ещё следующие 3 байта? Код:
|
02.06.2012, 12:22 | #2 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Потому что printf выводит строку вплоть до первого терминирующего символа ('\0'). Или считывайте отдельно каждое поле, не забывая добавлять в конец каждого массива (строки) этот ноль, либо выводите не printf-ом, а с помощью цикла for строго необходимое количество символов.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
02.06.2012, 13:27 | #3 | |
Пользователь
Регистрация: 27.07.2009
Сообщений: 22
|
Цитата:
|
|
02.06.2012, 14:03 | #4 | |
Пользователь
Регистрация: 27.07.2009
Сообщений: 22
|
Цитата:
Код:
PIC@P# @P# |
|
02.06.2012, 14:26 | #5 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
02.06.2012, 14:30 | #6 | |
Пользователь
Регистрация: 27.07.2009
Сообщений: 22
|
Цитата:
Код:
|
|
02.06.2012, 14:34 | #7 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
видимо, он рассматиривает id как null-terminated строку. А так как никакого null у вас в конце строки нет, то он и шпарит дальше, пока не найдёт \0.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
02.06.2012, 14:55 | #8 | |
Пользователь
Регистрация: 27.07.2009
Сообщений: 22
|
Цитата:
Код:
PIC@P#↑@x*↑ @P#↑@x*↑ НО почему strlen(fr.id) = 11 а sizeof(fr.id) = 3 (как и положено) ? |
|
02.06.2012, 16:40 | #9 | |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Цитата:
Вы уже решите одно из двух: 1) описываем структуру так, как байты лежат в файле. Это позволяет читать из файла всю структуру напрямую, но не позволяет рассматривать поля структуры как строки. ЛИБО 2) описываем поля структры как строки. Это не позволяет прочесть из файла всю структуру за раз, по позволяет работать с полями как со строками. Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
|
02.06.2012, 17:25 | #10 |
Пользователь
Регистрация: 27.07.2009
Сообщений: 22
|
спасибо за объяснение
читает и выводит отлично Код:
@P# НО помогите теперь упаковать это в структуру при таком подходе: Код:
откуда это взялось? )) как правильно составить структуру в этом случае? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
fread | GriFFoN | PHP | 1 | 22.10.2011 22:55 |
Использование fread без блокирующего режима | TRIZER | PHP | 4 | 20.06.2011 14:02 |
Чтение из файла | virtuhay266 | Помощь студентам | 0 | 27.11.2010 23:27 |
бинарное чтение файла.. | Gerry | Помощь студентам | 3 | 03.11.2009 11:59 |
Чтение из файла | Need_Help | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 19.05.2007 05:37 |