0 / 0 / 0
Регистрация: 15.09.2008
Сообщений: 26
|
||||||
1 | ||||||
Чтение бинарных файлов15.09.2008, 17:53. Показов 12961. Ответов 27
Метки нет (Все метки)
Здравствуйте уважаемые эксперты,хотелось бы узнать как можно прочитать шестнадцатиричные значения из файла,длиной 1б,в блок размером 4байта каждый.
И запихнуть каждыйблок в структуру для того чтоб обратиться к каждому значению отдельно. Проблемка у меня в том что байты в начале могут быть нулевыми,т.е.функции fread,fgets просто нечитают остальные, а со scanf я ужу мозги скрутил,не могу разобраться. Спасибо.
0
|
15.09.2008, 17:53 | |
Ответы с готовыми решениями:
27
Чтение бинарных файлов Чтение бинарных файлов Чтение бинарных файлов Чтение бинарных файлов по байтам |
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
15.09.2008, 18:24 | 2 |
попробуй с помощью fread
0
|
0 / 0 / 0
Регистрация: 15.09.2008
Сообщений: 26
|
|
15.09.2008, 18:42 [ТС] | 3 |
Мужик ты не внимателен,
Проблемка у меня в том что байты в начале могут быть нулевыми,т.е.функции fread,fgets просто нечитают остальные.
0
|
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
15.09.2008, 18:48 | 4 |
Тут все проще.Ты выводишь прочтенные байты через cout,
а у него нулевой байт - конец строки. Так что читаться-то они читаются,но в консоли ты их не увидишь
0
|
0 / 0 / 0
Регистрация: 15.09.2008
Сообщений: 26
|
|
15.09.2008, 19:00 [ТС] | 5 |
0
|
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
15.09.2008, 19:03 | 6 |
ага. Проще всего - форматированый вывод,побайтно :
Код
//....здесь цикл printf("%d ",(int) load_string[i] ); //
1
|
0 / 0 / 0
Регистрация: 15.09.2008
Сообщений: 26
|
||||||
15.09.2008, 19:09 [ТС] | 7 | |||||
0
|
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
15.09.2008, 19:14 | 8 |
вылетает с надписью "stack overflow"?
Добавлено через 2 минуты 2 секунды В любом случае,код неверен. Ты в цикле много раз читаешь из файла четыре байта,записываешь в начало load_string, потом выводишь один байт из совсем другой части load_string(кроме первых итераций)....
0
|
0 / 0 / 0
Регистрация: 15.09.2008
Сообщений: 26
|
|
15.09.2008, 19:26 [ТС] | 9 |
Та не вроде ,просто отчет об ошибке и все.
и к стати эт то что нужно. и если fgets( load_string[n], 4 , file ); то кричит error C2664: 'fgets' : cannot convert parameter 1 from 'char' to 'char *' може как нить сконвертить мона
0
|
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
15.09.2008, 19:32 | 10 |
нужно &load_string[n], функции передается не символ,а адрес,куда записать прочитанные байты.Кстати,почему четыре?
0
|
0 / 0 / 0
Регистрация: 15.09.2008
Сообщений: 26
|
||||||
15.09.2008, 19:44 [ТС] | 11 | |||||
Ну вот что получилось
0
|
296 / 56 / 5
Регистрация: 22.05.2008
Сообщений: 788
|
|
15.09.2008, 21:46 | 12 |
а еще есть такое,только надо инклюдить fstream.h
fstream f123(filename, ios::binary | ios::read | ios::write ); если я не ошибаюсь
0
|
0 / 0 / 0
Регистрация: 15.09.2008
Сообщений: 26
|
|
15.09.2008, 21:49 [ТС] | 13 |
Проблема оказалась в длине char load_string[1658881] ;, хотя это есть размер файла +1 под нулевой символ.
если ставлю char load_string[165888] ; то все работает нормально. спасибо ,но теперь вопрос как увеличить обьем char load_string;
0
|
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
15.09.2008, 21:56 | 14 |
в том то и дело,что должен был выдавать стек оверфлоу,но не выдавал(я у тя спрашивал). Локальные переменные функций сохраняются в стеке,а он не очень то резиновый. Используй динамическую память - выделишь память из кучи,и все окей.
char * load_string = new char[size] п.с используй символьные константы,вместо того,чтобы писать это длинное число каждый раз Добавлено через 3 минуты 3 секунды Да,и мне не хотелось прерывать такой полезный творческий процесс,но битмапы винда загружает буквально щелчком пальца ) Добавлено через 1 минуту 30 секунд п.п.с я через пару дней выложу сюда код загрузки битмапы,без сторонних библиотек. Для доведения темы до логического конца)
1
|
0 / 0 / 0
Регистрация: 15.09.2008
Сообщений: 26
|
|
15.09.2008, 23:08 [ТС] | 15 |
Ну воощет мне нужно было просто тело прочитать без BITMAPFILEHEADER и
BITMAPINFOHEADER.Записывать bmp без них научился эт как ты сказал буквально щелчком пальца, а здесь мне к каждому пикселу отдельный подход нужен. Спаибки большое за помощь.
0
|
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
15.09.2008, 23:34 | 16 |
vander,знаешь,в чем бонус хедеров? тебе не придется перекомпилировать программу для битмапов разного размера
0
|
0 / 0 / 0
Регистрация: 15.09.2008
Сообщений: 26
|
|
21.09.2008, 09:29 [ТС] | 17 |
Возникла проблема, при преобразовании в int
printf("%d ",(int) load_string[n] ); преобразует A9 в -87 а не в 169 Кто чо знает подскажите плиз
0
|
10 / 10 / 2
Регистрация: 18.08.2008
Сообщений: 127
|
|
21.09.2008, 12:47 | 18 |
vander если ты не нашел нормальный ответ на чтение бинарных файлов то скорее всего просто не с той стороны зашел . а может я нашел другой вариант .
итак там мне надо бы сохранить объект и считать снова . в общем смотри по ссылке .http://forum.sources.ru/index.php?showtopic=250486&st=0 там 14 сообщение френд фунции класса save() и load() если ты найдешь что-то полезное спроси здесь printf("%d ",(unsigned int) load_string[n] ); не пробовал?
0
|
0 / 0 / 0
Регистрация: 15.09.2008
Сообщений: 26
|
|
21.09.2008, 20:54 [ТС] | 19 |
0
|
0 / 0 / 0
Регистрация: 15.09.2008
Сообщений: 26
|
|
23.09.2008, 11:08 [ТС] | 20 |
qwone, А Ты не мог коментариии сделать хотябы на эти функции,плиз.
0
|
23.09.2008, 11:08 | |
23.09.2008, 11:08 | |
Помогаю со студенческими работами здесь
20
Чтение бинарных файлов неизвестного формата Запись и чтение бинарных файлов. Программа крашится при закрытии консольного окна Чтение бинарных данных из файла Чтение бинарных данных формата dat Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |