![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как прочесть фаил такой структуры [D7]
Silver... © (2008-02-01 13:26:00)Дается такая вот структура файла
1. 1 int
2. 90 int
3. 1 Int
4. 4 Int
5. 1 Int
------- Может повториться несколько раз --- Begin
6.1 4 int
6.2 16 char
6.3 16 char
------- Может повториться несколько раз --- End
7. 1 int
...
Думал прочсть в String или в поток а потом разбирать по-байтно, только предвижу мороки тут...
Есть др. решение?
ketmar (2008-02-09 11:24:00) [1]Удалено модератором
Бегущий человек (2008-02-09 07:56:00) [2]По-моему(если мне не изменяет память :) ) , если читать из файла не через FileStream, а дедовским способом через Read, то байты не будут инвертироваться.
Ай-ай-ай, не бейте ногами, - знаю, что read не кульно :)
Silver... (2008-02-08 22:04:00) [3]
> ketmar © (08.02.08 21:53) [42]
asm хорошо бум делать
> MOO (08.02.08 21:58) [43]
[29] ... наоборот читает вот в чем проблема - потом инвертировать надо ... а так проблем нету
MOO (2008-02-08 21:58:00) [4]
> НО все 4 байта сразу а не по одному
Эээ...и в чем проблема?
ketmar (2008-02-08 21:53:00) [5]>[40] Silver... (2008-02-08 21:51:00)
так как про "менять местами байты" ты, кажется, уже знаешь -- [39]. и
function Swap4 (v: Integer): Integer; assembler; asm bswap eax; end;.
---
Understanding is not required. Only obedience.
Silver... (2008-02-08 21:52:00) [6]
> ketmar © (08.02.08 21:45) [39]
> Silver... (08.02.08 19:14) [29]
> Есть функця Swap но для LongWordприменить нельзя
Silver... (2008-02-08 21:51:00) [7]
> ketmar © (08.02.08 20:12) [34]
> >[32] Silver... (2008-02-08 19:59:00)
> идём, и читаем про byte order. думаем. пишем.
> ketmar © (08.02.08 21:37) [37]
к кожалению на моем ничего путного не написано :)
Гуглю ... не нахожу :( ... ссылочку подкинь
ketmar (2008-02-08 21:45:00) [8]>[38] Silver... (2008-02-08 21:38:00)
swap, f1.
---
Understanding is not required. Only obedience.
Silver... (2008-02-08 21:38:00) [9]
> MOO (08.02.08 21:31) [36]
> PS. Ответ "сделай руками" не тот который ожидаю :)
Потому как сейчас именно так и делаю. Но не кажется несколько глуповато чтать наоборот чтоб потом инверситовать. Не логичнее читать сразу правельно - НО все 4 байта сразуа не по одномув обратном порядке = читать как есть потом инверсировать
ketmar (2008-02-08 21:37:00) [10]>[35] Silver… (2008-02-08 21:17:00)
>Где читать?
на заборе.
---
Understanding is not required. Only obedience.
MOO (2008-02-08 21:31:00) [11]
> Silver... (08.02.08 19:59) [32]
Что то мне подсказывает, что из 02 00 сделать 00 02. Вот и будет тебе 2, а не 512.
Silver... (2008-02-08 21:17:00) [12]
> ketmar © (08.02.08 20:12) [34]
Где читать?
> Anatoly Podgoretsky © (08.02.08 20:07) [33]
> > Silver... (08.02.2008 19:59:32) [32]
>
> Где прочтется, почему прочтется?
Где -> FileStream.Read(a, SizeOf(a));
почему -> а незнаю выводы делаю по тому что получаю после Read
--- Offtop - Begin -----------------------
to
> Anatoly Podgoretsky © (08.02.08 20:07) [33]
Из ваших постов видно что только по тексту замечания есть а по сути близко нулю
Искренние пожелания: "смотрим на луну а не на палец" - Зри в корень
PS. "И в окошке видеть 2 ,а не 512"
--- Offtop - End -----------------------
ketmar (2008-02-08 20:12:00) [13]>[32] Silver... (2008-02-08 19:59:00)
идём, и читаем про byte order. думаем. пишем.
блин, я согласен, чтобы не чинили дороги, только пусть устранят вторую проблему!
---
Understanding is not required. Only obedience.
Anatoly Podgoretsky (2008-02-08 20:07:00) [14]> Silver... (08.02.2008 19:59:32) [32]
Где прочтется, почему прочтется?
Silver... (2008-02-08 19:59:00) [15]FileStream.Read(a, 2)
Читает байты с конца к началу
типа в файле написано: 00 02
прочтется: 02 00
вместо нужного a = 2
получаю a = 512
как сделать?
...
a: Word;
...
FileStream.Read(a, SizeOf(a));
ShowMessage(IntToStr(a));
...
И в окошке видеть 2а не 512
Достаточо по русски?
Silver... (2008-02-08 19:42:00) [16]а где именно не понятно?
Anatoly Podgoretsky (2008-02-08 19:40:00) [17]> Silver... (08.02.2008 19:14:29) [29]
Что ты написал, повтори по русски.
Silver... (2008-02-08 19:14:00) [18]... извеняюсь за долгое отсуствие
Anatoly Podgoretsky © (01.02.08 20:41) [27]
Хотел подсказки как сделать ввиде
FileStream.Read( MyRec, SizeOf(MyRec));
и одним махом получть весь файл в мою запись MyRec
... проблема в том что во все поля чталось по 2 байта а не 2, 1, 4 байта соответственно ... да еще чталось наоборот - поэтому казалось что в корни не так делаю. Разбирая HexEdit-ом понял что инвертировать надо
вобщем разбираю файл побайтно
наткнулся на следующее:
делаю
MyRec: record
...
Pole1: Word; // 16 bit
Pole2: Byte; // 8 bit
Pole3: LongWord; // 32 bit
...
end;
...
FileStream.Read(MyRec.Pole1, SizeOf(MyRec.Pole1));
FileStream.Read(MyRec.Pole2, SizeOf(MyRec.Pole2));
FileStream.Read(MyRec.Pole3, SizeOf(MyRec.Pole3));
...
из файла
---
00 02 C1 00 FC 50 01
---
получаю значения
MyRec.Pole1 = 02 00
MyRec = C1
MyRec.Pole2 = 01 50 FC 00
т.е. прочитаные наоборот
Есть функця Swap но для LongWord применить нельзя
Вопрос: Как чтать в том порядке как записано в файле а не наоборот
PS. Ответ "сделай руками" не тот который ожидаю :)
Плохиш (2008-02-01 23:34:00) [19]
> Silver... (01.02.08 18:23) [25]
Я сказал вариант, слушать не хочешь, чё пришёл с вопросами, не понятмно... Сиди дальше скули...
Anatoly Podgoretsky (2008-02-01 20:41:00) [20]> Silver... (01.02.2008 18:23:25) [25]
Так нет никакой разницы в таком случае, помогут тебе или нет.