| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как правильно прочитать начало файла |
| Автор: JohnnySE 15.8.2006, 15:51 |
| начало файла: FF FF FF 7F как получить такой вид: 0x7fffffff |
| Автор: _hunter 15.8.2006, 15:59 |
| а чем не устраивает такой: 0xffffff7f вид? P.S. чтобы получить вышеукзанный вид все байты развернуть -- первый на место последнего (и наоборот), второй на место третьего (инаоборот) |
| Автор: Snowy 15.8.2006, 16:01 |
| Открываешь файл через TFileStream. Делаешь ReadInteger - получаешь число в правильном порядке. |
| Автор: Alexeis 15.8.2006, 16:14 |
Для архитектуры Intel байты данных в памяти и файле хранятся в порядке обратном тому кототорый мы используем при записи на бумаге или при наборе в текстовом редакторе. |
| Автор: Snowy 15.8.2006, 16:18 |
| Именно поэтому нужно читать не побайтово, а блоком, чтобы данные встали на соответствующее место в памяти. Через ReadInteger читаем сразу четырёхбайтовое значение и оно корректно ложится в память на свои 4 байта. |
| Автор: JohnnySE 15.8.2006, 16:47 | ||
| Я наверно не правильно задал вопрос. В файл я выгрузил данные для себя и для сравнения.
читаю MemStreamOut.ReadBuffer(fileheader, sizeof(fileheader)); и вижу что fileheader.start_sig = (255,255,255,127); а мне надо получить 7fffffff, как? |
| Автор: Yanis 15.8.2006, 16:51 |
| JohnnySE А почему бы в структуре не заменить array[0..3]of byte на Integer? |
| Автор: Romikgy 15.8.2006, 16:54 |
| JohnnySE, а покажи как загружал? этот массив как инициализировал? |
| Автор: Yanis 15.8.2006, 16:58 | ||
| JohnnySE Конечно, если нужны извращения, то можно и так твой массив перевести:
|
| Автор: JohnnySE 15.8.2006, 17:05 |
| Если меняю на integer, то в массив попадает 2147483647,512,1,0 А если byte то 255,255,255,127 потом можно сделать так цикл HStr:= HStr+IntToHex(fileheader.start_sig[i],2); и получаем то что надо Спасибо Всем |
| Автор: Yanis 15.8.2006, 17:13 |
Мой вариант на пару суток быстрее! |