Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
Ji ©   (2005-02-18 01:09) [0]

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


 
Просто Джо ©   (2005-02-18 01:59) [1]

Способ №1

type
 TArr8 = array [0..7] of byte;
var
 Arr: TArr8;
 D: Double;
begin
 Move (Arr,D,SizeOf(Double));
end;

------------------------------------

------------------------------------
Способ №2
type
 TArr8 = array [0..7] of byte;
var
 Arr: TArr8;
 D: Double absolute Arr;

------------------------------------

------------------------------------
Способ №3
type
 TTwins = record
  case Byte of
   0: (ArrayValue: array [0..7] of byte);
   1: (DoubleValue: Double)
 end;
var
 Twins: TTwins;

------------------------------------

Лично я предпочитаю №1 и №3. Но это дело вкуса.


 
XProger ©   (2005-02-18 02:04) [2]

d := double(a);


 
Просто Джо ©   (2005-02-18 02:09) [3]


> [2] XProger ©   (18.02.05 02:04)


Эх, взял и испортил такую тему...
;)


 
Kerk ©   (2005-02-18 07:21) [4]

еще вариант :)

var
 Arr: array [0..7] of byte;
 D: Double;
begin
 D := PDouble(@Arr[0])^;
end;


 
begin...end ©   (2005-02-18 08:00) [5]

> Просто Джо ©   (18.02.05 1:59) [1]
> Kerk ©   (18.02.05 7:21) [4]

Нифига. Автор просил преобразовать массив array[1..8] of byte, а вы что подсовываете? Какой-то array [0..7] of byte.

:-)


 
Kerk ©   (2005-02-18 08:06) [6]

begin...end ©   (18.02.05 8:00) [5]

блин, точно.. ну тогда совсем по-другому надо.. сейчас подумаю..


 
Digitman ©   (2005-02-18 08:57) [7]


> Ji ©   (18.02.05 01:09)  


преобразовать или привести к типу ? разные же разности .. в первом случае операция копирования требуется , во втором - нет


 
Ji ©   (2005-02-18 10:48) [8]

> begin...end ©

А какая разница? Если что, то у меня это может выглядеть и как array[0..100] of byte. из которого [50..58] нужно преобразовать в double.
Я думаю в случае чего можно создать еще один массив [0..7] , передать в него нужные байты и с ним уже работать. Так что все ответы в кассу.


 
ASMiD   (2005-02-18 11:58) [9]

Эх пятница что-ли?

var
 ab:array[1..8] of byte;
 ad:array[1..8] of double;
 k1:integer;
begin
 for k1:=1 to 8 do ad[k1]:=ab[k1];
end;


 
Digitman ©   (2005-02-18 12:05) [10]


> ASMiD   (18.02.05 11:58) [9]
> Эх пятница что-ли?


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


 
Ji ©   (2005-02-18 12:05) [11]

> ASMiD   (18.02.05 11:58) [9]

Это из серии d := double(a) ?

:)


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

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

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


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


 
begin...end ©   (2005-02-18 12:28) [13]

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

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

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

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


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

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


 
palva ©   (2005-02-18 12:58) [15]

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

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


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

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


 
palva ©   (2005-02-18 13:11) [17]

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


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


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


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

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


 
Ji ©   (2005-02-18 14:46) [19]

> 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 и спокойно сортировать, работая с вещественными числами


 
begin...end ©   (2005-02-18 14:51) [20]

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

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

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


 
Digitman ©   (2005-02-18 14:56) [21]


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


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

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


 
Ji ©   (2005-02-18 15:15) [22]

да... неудачный пример... понял, когда уже написал...
итак, вторая редакция:
читаем из файла 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

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


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


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


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

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

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


 
Digitman ©   (2005-02-18 15:26) [24]


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


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


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


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


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


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

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

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


 
Ji ©   (2005-02-18 15:29) [25]

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

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


 
begin...end ©   (2005-02-18 15:34) [26]

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

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

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


 
Ji ©   (2005-02-18 15:38) [27]

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

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

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

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

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


 
begin...end ©   (2005-02-18 15:47) [28]

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

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


 
Digitman ©   (2005-02-18 15:50) [29]


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


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


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


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


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

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


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


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


 
Ji ©   (2005-02-18 16:21) [30]

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

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

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


 
Digitman ©   (2005-02-18 16:53) [31]

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.036 c
3-1107333036
Oleg_
2005-02-02 11:30
2005.03.06
case ... when в запросе выдает ошибку


1-1109092925
Knight
2005-02-22 20:22
2005.03.06
Как узнать реальный объём занимаемый файлом на диске...


14-1107260269
IronHawk
2005-02-01 15:17
2005.03.06
Телевизионная разводка по дому, кто подскажет девайс?


1-1108743051
creage
2005-02-18 19:10
2005.03.06
Вопрос по созданию прокси сервера


1-1108674666
Kladbische
2005-02-18 00:11
2005.03.06
Определить папку автозапуска для всех п...ей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский