Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение Бинарного Кода из Файла 
:(
    Опции темы
tht
  Дата 7.2.2007, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



в общем. ни как не могу прочитать в файле байты 0x00
типа это указывает что это конец файла.
 а мне нужно их прочесть и поместить в буфер
подскажи плиз как, с помощью стандартный функций прочитать такие символы как 0x00 и подобные.
заранее благодарю.
PM MAIL   Вверх
skyboy
Дата 7.2.2007, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(tht @  7.2.2007,  02:08 Найти цитируемый пост)
типа это указывает что это конец файла.

странно. ничего это не указывает. чем читаешь? код где?
PM MAIL   Вверх
Fazil6
Дата 7.2.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

типа это указывает что это конец файла.

недолжно.
как ты проверяешь конец файла?  
PM MAIL   Вверх
tht
Дата 7.2.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



я вам реально говорю. не читает !!! короче есть 8 байт в файле, такого вида
0xE2 0x03 0x00 0x00 0x00 0x58 0x48 0x4D

первый два байта читаются функциями любыми библиотеки stdio 
fread(); fgets(); fgetc(); и тп. остальные байты т.е. 0x00 не читаются, и указатель не уходит дальше них. а нада считать все имеющиееся байты включая эти нули 0x00. все 8 байтов.
PM MAIL   Вверх
vinter
Дата 7.2.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



tht, приведи код как ты читаешь из файл, а то так сложно что-то говорить..


--------------------
Мой блог
PM MAIL WWW   Вверх
tht
Дата 7.2.2007, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



Код

        fh = fopen("server_send.txt","r");
        fread(&rcvBuff,8,1,fh);
        fclose(fh);
        recv_count = strlen(rcvBuff);
        printf("%i BYTES READ. %s\n",recv_count,rcvBuff);

вы дает 2 байта прочитаных. и соотвественно выводит только этих два байта которые первые в файле.
PM MAIL   Вверх
Vyacheslav
Дата 7.2.2007, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Код

#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>

//---------------------------------------------------------------------------
using namespace std;
int main(int argc, char* argv[])
{
    ifstream in("Demo.exe", ios_base::binary);
    string fd = string(  istreambuf_iterator< char >(in), istreambuf_iterator< char >() );
    cout << hex;
    copy(fd.begin(), fd.end(), ostream_iterator< int, char >(cout, " ") );


    return 0;
}
//---------------------------------------------------------------------------
 



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
skyboy
Дата 7.2.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



tht, ты записываешь данные в null-terminated строку. т.е. в список символов, концом которого(концом строки, а не файла!) считается символ с кодом 0. т.е. ты реально читаешь 8 байт. но помещаешь в структуру, из которой сможешь вытянуть только символы до первого кода ноль.
PM MAIL   Вверх
tht
Дата 7.2.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



Цитата(skyboy @ 7.2.2007,  16:35)
tht, ты записываешь данные в null-terminated строку. т.е. в список символов, концом которого(концом строки, а не файла!) считается символ с кодом 0. т.е. ты реально читаешь 8 байт. но помещаешь в структуру, из которой сможешь вытянуть только символы до первого кода ноль.

и что мне с этим можно сделать ?

Vyacheslav спасибо. учту, но мне еще интересен другой вариант.

PM MAIL   Вверх
vinter
Дата 7.2.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата
и что мне с этим можно сделать ?


подумай, тут уже дело в обработке строки, а вообще можешь читать попеременно в переменную типа int и сразу выводить на экран


--------------------
Мой блог
PM MAIL WWW   Вверх
skyboy
Дата 7.2.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(tht @  7.2.2007,  15:50 Найти цитируемый пост)
и что мне с этим можно сделать ?

с чем? с 0-символами? сам решай. либо храни в массива char* и определяй его длину после чтения при помощи функций работы с файлом, либо сделай так, чтоб в файле не было 0 символов. 
PM MAIL   Вверх
tht
Дата 7.2.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



они там в файле 0x00 хоть как будут и должны быть. считайте что это протокол такой. которые изменить нельзя.
PM MAIL   Вверх
SerpentVV
Дата 7.2.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 27.11.2006
Где: Астрахань

Репутация: 1
Всего: 1



Цитата(tht @ 7.2.2007,  16:23)
Код

        fh = fopen("server_send.txt","r");
        fread(&rcvBuff,8,1,fh);
        fclose(fh);
        recv_count = strlen(rcvBuff);
        printf("%i BYTES READ. %s\n",recv_count,rcvBuff);

вы дает 2 байта прочитаных. и соотвественно выводит только этих два байта которые первые в файле.

1. По умолчанию ты открываешь файл как текстовый... Нужно прописать в fopen "rb"
2. Функция strlen  тебе до первого нуля и посчитает...
3. Выводишь ты их как строку - опять же выведется до нуля...

Добавлено @ 17:18 
Цитата(tht @ 7.2.2007,  17:15)
они там в файле 0x00 хоть как будут и должны быть. считайте что это протокол такой. которые изменить нельзя.

Тогда нельзя работать со строковыми функциями ибо они все до ближайшего нуля работают...

PM MAIL   Вверх
tht
Дата 7.2.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



ничего не получается. я пробывал всяко как вы говорили я даже буфер сделал int rcvBuff[10];
видите ? целый... все равно чтение только первых двух байтов.
короче говоря не читает функция fread все 8 байтов, а только до нуля.
в то время как printf() способна вывести любые байты на экран.

Это сообщение отредактировал(а) tht - 7.2.2007, 18:12
PM MAIL   Вверх
SerpentVV
Дата 7.2.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 27.11.2006
Где: Астрахань

Репутация: 1
Всего: 1



Короче, приведи полный текст с объявлениями переменных и попытками вывода на экран...

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0738 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.