Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно прочитать начало файла 
:(
    Опции темы
JohnnySE
Дата 15.8.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



начало файла: FF FF FF 7F
как получить такой вид: 0x7fffffff 
PM MAIL   Вверх
_hunter
Дата 15.8.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



а чем не устраивает такой:
0xffffff7f
вид?

P.S.
чтобы получить вышеукзанный вид все байты развернуть -- первый на место последнего (и наоборот),  второй на место третьего (инаоборот)


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 15.8.2006, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Открываешь файл через TFileStream.
Делаешь ReadInteger - получаешь число в правильном порядке.
PM MAIL   Вверх
Alexeis
Дата 15.8.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Snowy @  15.8.2006,  16:01 Найти цитируемый пост)
Делаешь ReadInteger - получаешь число в правильном порядке

Для архитектуры Intel байты данных в памяти и файле хранятся в порядке обратном тому кототорый мы используем при записи на бумаге или при наборе в текстовом редакторе.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 15.8.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Именно поэтому нужно читать не побайтово, а блоком, чтобы данные встали на соответствующее место в памяти.
Через ReadInteger читаем сразу четырёхбайтовое значение и оно корректно ложится в память на свои 4 байта.
PM MAIL   Вверх
JohnnySE
Дата 15.8.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я наверно не правильно задал вопрос.
В файл я выгрузил данные для себя и для сравнения.

Код

type
stFileHeader = record
  start_sig:  array[0..3]of byte;     // всегда 0x7fffffff
  finish_sig: array[0..3]of byte;     // всегда 0x00000200
  blocks_num: array[0..3]of byte; // похоже на количество блоков
  reserved:   array[0..3]of byte;    // зарезервировано
end;


читаю
  MemStreamOut.ReadBuffer(fileheader, sizeof(fileheader));
и вижу что fileheader.start_sig = (255,255,255,127);

а мне надо получить 7fffffff, как?

Это сообщение отредактировал(а) Girder - 29.8.2006, 14:44
PM MAIL   Вверх
Yanis
Дата 15.8.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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



JohnnySE
А почему бы в структуре не заменить array[0..3]of byte на Integer?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 15.8.2006, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



JohnnySE, а покажи как загружал?
Цитата(JohnnySE @  15.8.2006,  15:47 Найти цитируемый пост)
 start_sig:  array[0..3]of byte;

этот массив как инициализировал?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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



JohnnySE
Конечно, если нужны извращения, то можно и так твой массив перевести:
Код
  dwNum: DWORD;
begin
  start_sig[0] := 255;
  start_sig[1] := 255;
  start_sig[2] := 255;
  start_sig[3] := 127;

  dwNum := ((start_sig[0] or start_sig[1] shl 8) or (start_sig[2] or start_sig[3] shl 8) shl 16);
end;



--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
JohnnySE
Дата 15.8.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если меняю на integer, то в массив попадает 
2147483647,512,1,0
А если byte 
то 255,255,255,127
потом можно сделать так
цикл
HStr:= HStr+IntToHex(fileheader.start_sig[i],2);
и получаем то что надо
Спасибо Всем

PM MAIL   Вверх
Yanis
Дата 15.8.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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



Цитата(JohnnySE @  15.8.2006,  18:05 Найти цитируемый пост)
и получаем то что надо
Спасибо Всем

Мой вариант на пару суток быстрее!


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
JohnnySE
Дата 16.8.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Yanis @  15.8.2006,  16:58 Найти цитируемый пост)
Конечно, если нужны извращения, то можно и так твой массив перевести:


вот просил помочь, а Вы извращения...
http://forum.vingrad.ru/index.php?showtopic=107533
Заголовок файла

{
    DWORD sig;            // всегда 0x7fffffff
    DWORD sig2;            // всегда 0x00000200
    DWORD blocks_num;        // похоже на количество блоков, но не всегда    
                    // поэтому расчитываем количество блоков сами
    DWORD reserved;
};

Заголовок элемента
{
    char EOL[2];            
    char data_len[8];            // размер данных в HEX как строка!
    char space1;            
    char page_len[8];            // размер страницы в HEX как строка!
    char space2;            
    char next_item_addr[8];        // указатель на следующую страницу 
                        // текущего блока в HEX как строка.
                        // Если последняя страница, то 0x7fffffff
    char space3;            
    char EOL_2[2];
};

Cсылка на блок описания метаданных 

{
    DWORD block_header_addr;    // адрес заголовка
    DWORD block_data_addr;        // адрес данных
    DWORD fffffff;            // должно быть равно 0x7fffffff. Если
                        // нет, то блоки ссылок закончились
};

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

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

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


 




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


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

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