![]() |
|
Модераторы: bsa |
![]()
|
|
| GraNit |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Здравствуйте, уважемые знатоки!
суть моей проблемы: читаю из двоичного потока. Поток это файл данных, написан еще под ДОС, поэтому формат файла свой собственный. в нем записан год в виде двух байт, а именно CA07. Это как известно 1994 (старший байт идет за младшим), так вот никак не могу добиться отображения в нормальном виде, получается всякая белиберда типа 838151. Читаю побайтно в массив char функцией fgetc. Долго рыл в инете, поэтому может быть много мусора, т.к. пытался применить всякие разные способы преобразования. Поэтому прошу меня сильно по голове не бить Вот моя функция:
Это сообщение отредактировал(а) GraNit - 7.10.2012, 13:56 |
|||
|
||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: нет Всего: 54 |
GraNit, код не осилил, но если бы мне нужно было из двух байт сделать одно многобайтовое число, то я бы сделал как то так:
Это для случая если байты сложены наоборот, т.е. 4 3 2 1, а не 3 4 1 2 или 1 2 3 4 или еще как-нибудь. Есть еще один "бесплатный" способ приведения - union'ы (в С++ есть еще и анонимные union'ы, которые позволяют обращаться внутри метогда, где они объявлены, к членам объединения непосредственно). Тот же пример:
Как видно, тут вообще делать ничего не пришлось. Но здесь мы не сможем изменить порядок следования байт. Это сообщение отредактировал(а) Gluttton - 7.10.2012, 16:05 -------------------- Слава Україні! |
||||
|
|||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
В итоге Вы читаете 6 байт, следующие друг за другом. Для таких вещей больше подходит fread, что заодно упростит обработку ошибок (в приведённом коде она напрочь отсутствует):
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
| GraNit |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Спасибо xvr!!!
Я не знал, что в windows int 4-х байтовый. Теперь все в норме. По поводу fseek между байтами стоит 0x00 поэтому приходится сдвигать указаталь. короче поле следующего вида в hex: 05 00 0С 00 CA 07. Благодарю всех кто отозвался!!! |
|||
|
||||
| GraNit |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Тема закрыта.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |