Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как преобразовать array[1..8] of byte в double


Страницы:   1 2

Ji ©   (2005-02-18 01:09:00) 

тогда у меня к вам вопрос такой:
как преобразовать array[1..8] of byte в double?


Digitman   (2005-02-18 16:53:00) [1]

все это "пахнет" ПОЛНОЦЕННОЙ БД + СУБД) ..
а не каким-то там задрипаным "файлом")


Ji   (2005-02-18 16:21:00) [2]

> begin...end ©   (18.02.05 15:47) [28]

>Лучше, ИМХО, прочитать из файла вначале только ключевые поля и составить записи с полями Ключ: Double и Номер_В_Файле: Integer. Затем отсортировать эти записи по ключам и потом уже в нужном порядке прочитать сами массивы из файла.

Дельный совет, спасибо!


Digitman   (2005-02-18 15:50:00) [3]


> Ji ©   (18.02.05 15:38) [27]


> А я и не программист


а кто ж тогда ? управдом ?


> Файл нетипизированный.  


а не чушь ли ты городишь ?

[22] - это не я придумал, это ты САМ заявил ...
или термин "типизированный файл" для тебя - что мертвому припарка ..


> то с какого мне его читать по байтам


так ты еще и ПО БАЙТАМ его читаешь?!!!
ну знаешь ли !)
геморрой - проблема сугубо интимная)))


begin...end   (2005-02-18 15:47:00) [4]

> Ji ©   (18.02.05 15:15) [22]

Только вот ещё что. Зачем сразу читать массивы? Т.е. если элементов в них действительно do_hera, то всякие перемещения записей some_type во время сортировки будут происходить медленно, так ведь? Лучше, ИМХО, прочитать из файла вначале только ключевые поля (10 раз по 8 байт, смещаясь с помощью Seek) и составить записи с полями Ключ: Double и Номер_В_Файле: Integer. Затем отсортировать эти записи по ключам и потом уже в нужном порядке прочитать сами массивы из файла (если их вообще надо оттуда читать).


Ji   (2005-02-18 15:38:00) [5]

> Digitman ©   (18.02.05 15:26) [24]

> ты в ПРИНЦИПЕ не в состоянии изложить задачу языком программиста

А я и не программист :-Ь

файл-то - типизированный  ?

Файл нетипизированный. Если бы он был таковым, то с какого мне его читать по байтам.


begin...end   (2005-02-18 15:34:00) [6]

> Digitman ©   (18.02.05 15:26) [24]

> да и оно нахрен тут нужно, если поле b и так уже имеет
> тип "дабл" ?!!!

Он читает 10 массивов размером do_hera + 1, потом из них, по-видимому, вычисляет double-поле, а потом уже сортирует. Т.е. преобразование всё-таки нужно, наверное. Чтобы хотя бы заполнить double-поле.


Ji   (2005-02-18 15:29:00) [7]

>begin...end ©   (18.02.05 15:23) [23]
>Однако эти байты не обязательно появились из Double. Например, >они могут быть внутренним представлением целого числа - Int64.

Это, можно сказать, начальное условие. Они 100% появились из Double. Ну а в общем-то вернулись к тому с чего начинали (первые 4 комента). Только раздули на 25 сообщений.
Всем спасибо, можно больше не комментировать.


Digitman   (2005-02-18 15:26:00) [8]


> может опять грубый пример


да не то что "грубый" - детсад просто !
ты в ПРИНЦИПЕ не в состоянии изложить задачу языком программиста)


> читаем еще раз такую же (или другую)


так "такую же" или таки "другую" ?!
файл-то - типизированный  ?
если да, то размер записи = do_hera ?
или ты тут горбатого лепишь нам ?!


> нужно элементы в массиве C


массив УСПЕШНО сформировал в рез-те чтения файла ? никаких. надо понимать, недоразумений нет ?

ПРАВИЛЬНО ЛИ я понял, что после УСПЕШНОГО формирования массива тебе необходимо пересортировать его эл-ты по признаку возрастания значения поля b: double ?

если понял я это ПРАВИЛЬНО, то НА КОЙ ЛЯД нужно именно преобразование, когда для передачи  в ф-цию соравнения эл-тов того или иного алгоритма сортировки нужно лишь приведение типов ? да и оно нахрен тут нужно, если поле bи так уже имеет тип "дабл" ?!!!


begin...end   (2005-02-18 15:23:00) [9]


> Ji ©   (18.02.05 15:15) [22]


> с 0 по 7 байт - известно, что это 8 байт, которые
> являются типом double

Байты не являются типом Double. Совокупность байтов может являться внутренним представлением переменной типа Double. Однако эти байты не обязательно появились из Double. Например, они могут быть внутренним представлением целого числа - Int64.

А как эти байты записаны - в прямом порядке или обратном? Если в прямом, т.е. так, как они располагались в памяти, т.е. нулевой элемент массива - это нулевой байт переменной Double, первый элемент - это первый байт переменной, и т.д., то см. предыдущие советы ([1], [2], [4]). Если в обратном, то переворачивайте.


Ji   (2005-02-18 15:15:00) [10]

да... неудачный пример... понял, когда уже написал...
итак, вторая редакция:
читаем из файла array[0..do_hera] of byte;
с 0 по 7 байт - известно, что это 8 байт, которые являются типом double (или TDateTime если хотите) (hex-редактор легко переводит эти 8 байт в дату и время)
с 8 по do_hera байт - просто набор байтов.
читаем еще раз такую же (или другую) последовательность байт и т.д.
ЗАДАЧА:
some_type=record
a: array[0..do_hera] of byte;
b: double;
end;
var
c: array[1..10] of some_type;

нужно элементы в массиве Cсортировать таким образом:
c[1].b < c[2].b < ... < c[10].b
при этом b-  8 первых байт массива a

может опять грубый пример?...
просто мне в голову другого решения не приходит...


Digitman   (2005-02-18 14:56:00) [11]


> Ji ©   (18.02.05 14:46) [19]


что-то бред какой-то ..

ну-ка приведи РЕАЛЬНЫЙ тип массива ...


begin...end   (2005-02-18 14:51:00) [12]

> Ji ©   (18.02.05 14:46) [19]

> например идея была такова array[1..20,1..8] of byte
> нужно сортировать элементы массива [1..20] в порядке
> возрастания

Элементами массива [1..20] являются массивы [1..8]. Как можно расположить несколько массивов в порядке возрастания? И самое главное - при чём тут Double?


Ji   (2005-02-18 14:46:00) [13]

> palva ©   (18.02.05 12:58) [15]

Суть вопроса.
В итоге нужно сравнить эти переменные и пересортировать.
то есть, например идея была такова array[1..20,1..8] of byte
нужно сортировать элементы массива [1..20] в порядке возрастания, поэтому первое решение пришедшее в голову: преобразовать array[1..20,1..8] of byte в array[1..20] of double и спокойно сортировать, работая с вещественными числами


Digitman   (2005-02-18 13:47:00) [14]


> объясните нам суть вопроса, а то никак вникнуть не можем


я ведь тоже - что вижу, то и танцую)

в вопросе ясно сказано - есть данные такого-то типа, нужно преобразоавть эти данные в ТЕ ЖЕ (!) данные, но, с т.з. компилятора, другого типа


palva   (2005-02-18 13:11:00) [15]

Они уже в памяти перевернуты лежат. Во!


palva   (2005-02-18 13:07:00) [16]

Неправ я был, не переворачивается Double при записи в файл


palva   (2005-02-18 12:58:00) [17]

> уж такую хрень несешь, что и за пятницу стыдно) ... ты хоть бы вник в суть вопроса что ли

Тогда объясните нам суть вопроса, а то никак вникнуть не можем. Что значит преобразовать array[1..8] of byte в double? Даже при неизменном содержимом этих байтов возникают вопросы. Ну к примеру: байты нужно реверсировать? Потому что если эти байты прочитаны из файла, который был записан как file of double, то эти байты будут в обратном порядке. Вообще, когда справшивают как перевести массив из 8 чисел в одно число, то возникает единственное желание поерничать, потому что серьезно ответить невозможно.


Eraser   (2005-02-18 12:30:00) [18]

Ji ©
Что храниться в этом массиве? Чем он заполнен? Откуда взял значения?


begin...end   (2005-02-18 12:28:00) [19]

> Ji ©   (18.02.05 10:48) [8]

Там в [5] внизу смайлик имеется.

> Ji ©   (18.02.05 12:05) [11]

> Это из серии d := double(a) ?
А чем не устраивает d := double(a)?


ASMiD   (2005-02-18 12:09:00) [20]

Может тогда так?

type
 r1=record
 case byte of
 0:(ab:array[1..8] of byte;
 1:(dd:double);
 end;


и париться не надо. Или я опять чего-то не понял?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо