Имя: Пароль:
IT
 
помогите расшифровать структуру
0 nop
 
20.04.11
14:18
000000000000D83F000000000000E83F (длинна строки 32 символа)

человечески, здесь сказано "в интервале от 00 до 24 часов для рабочее время с 13:00 до 14:00" точность до минут.
1 Vovik
 
20.04.11
14:19
Че?
2 DGorgoN
 
20.04.11
14:20
по 16 символов в каждом обозначении даты - 16-е число :)
3 nop
 
20.04.11
14:20
(1) эта строка представляет временной интервал суток. На ней выбран интервал с 13:00 до 14:00
4 DGorgoN
 
20.04.11
14:21
16-16:
000000000000D83F и 000000000000E83F
5 zak555
 
20.04.11
14:21
D83
E83
6 nop
 
20.04.11
14:21
(2) здесь нету даты, это минуты в сутках
7 DGorgoN
 
20.04.11
14:21
(6) ну.. сам же догадался уже
8 zak555
 
20.04.11
14:21
D83 - 13:00
E83 - 14:00
9 zak555
 
20.04.11
14:23
D = 9 + 4 (номер в алфавите)
E = 9 + 5 (номер в алфавите)
10 DGorgoN
 
20.04.11
14:23
D = 13 по 16 ричной системы елки
11 DGorgoN
 
20.04.11
14:23
E=14
12 nop
 
20.04.11
14:23
(8) а D83 перевести в в точку на временной шкале, равной 13:00 ? Через двоичный код ?
13 DGorgoN
 
20.04.11
14:24
83 правда 131 но может это признак формата какой то
14 DGorgoN
 
20.04.11
14:24
(12) см (10) и (11)
15 DGorgoN
 
20.04.11
14:24
83F = 2111
16 nop
 
20.04.11
14:25
(11) (10) тогда как выразить число 23? Нет для него буквы
17 nop
 
20.04.11
14:25
могу другой пример шкалы кинуть
18 DES
 
20.04.11
14:25
добавляй по 1 часу и по 1 мин
смотри на результат
19 Denp
 
20.04.11
14:25
(15) F -  это признак 16ричного числа, его не надо брать
20 DGorgoN
 
20.04.11
14:26
и что обозначает хз..
может год :) = 2111, а все остальное на минуты и секунды
21 Denp
 
20.04.11
14:26
(17) давай
22 zak555
 
20.04.11
14:26
(19) ничего что там 83 ???
23 aleks-id
 
20.04.11
14:28
(20) а ничё что шестнадцатеричные числа имеют признак h ?
24 nop
 
20.04.11
14:29
(20) здесь только время, нету даты.
(21) выковыриваю из БД ...
25 DES
 
20.04.11
14:29
(23) в каком разе ?
26 zak555
 
20.04.11
14:29
83 = 60 + 23

23 - отклонение относительно по меридиану =)
27 nop
 
20.04.11
14:31
(21) 555555555555C53F000000000000EC3F
здесь указан интервал с 4:00 до 21:00
28 DGorgoN
 
20.04.11
14:31
(27) от это уже интереснее :)
29 DGorgoN
 
20.04.11
14:32
может у тебя значения в базе просто зашифрованы? :)
30 Denp
 
20.04.11
14:32
(23) хммм.... ступил я
31 nop
 
20.04.11
14:34
(29) нету смысла их шифровать, и для шифра как то несерьзно симметрично выглядит
32 nop
 
20.04.11
14:35
коварное 3F осталось на своем месте
33 aleks-id
 
20.04.11
14:35
(27) ковырни с 9:00 до 12:00
34 nop
 
20.04.11
14:35
(33) ок, ковыряю
35 zak555
 
20.04.11
14:36
(27) вынос мозга

ты сразу приведи ещё примеры несколько интервалов
36 DES
 
20.04.11
14:36
может поможет:
7.1.3. Тип дата-время

Тип дата-время определяется стандартным идентификатором TDateTime и предназначен для одновременного хранения и даты, и времени. Во внутреннем представлении он занимает 8 байт и подобно currency представляет собой вещественное число с фиксированной дробной частью: в целой части числа хранится дата, в дробной - время. Дата определяется как количество суток, прошедших с 30 декабря 1899 года, а время - как часть суток, прошедших с 0 часов, так что значение 36444,837 соответствует дате 11.10.1999 и времени 20:05. Количество суток может быть и отрицательным, однако значения меньшие -693594 (соответствует дате 00.00.0000 от Рождества Христова) игнорируются функциями преобразования даты к строковому типу.

Над данными типа TDateTime определены те же операции, что и над вещественными числами, а в выражениях этого типа могут участвовать константы и переменные целого и вещественного типов.
37 wsxedc83
 
20.04.11
14:37
(27) Приведи несколько все временные интервалы - от [с 00:00 до 1:00], до [с 00:00 до 23:00] а потом до [с 22:00 до 23:00] - тогда будет ясно как закодировано время. Можно, кстати, с минутами.
38 DGorgoN
 
20.04.11
14:37
просто в строке зашифрованы 2 значения и записаны в 32 битное выражение
39 nop
 
20.04.11
14:38
(37) эти интервалы пересекаются, потому это будут 3 отдельных строки. Делаю
40 DGorgoN
 
20.04.11
14:38
в общем побольше примеров, может (36) вполне
41 nop
 
20.04.11
14:43
(33) 000000000000D83F000000000000E03F
это с 9:00 до 12:00
(37) щас ...
42 zak555
 
20.04.11
14:45
(41) а отличается только "хвост" от (0)
43 nop
 
20.04.11
14:57
(37) Итого имеем такое
0000000000000000555555555555A53F - с 00:00 по 01:00
555555555555ED3FAAAAAAAAAAAAEE3F - с 22:00 по 23:00
AAAAAAAAAAAAEE3F000000000000F03F - с 23:00 по 00:00
0000000000000000555555555555A53FAAAAAAAAAAAAEE3F000000000000F03F - с 00:00 по 01:00 и с 23:00 по 00:00

ну и те что уже были выше
555555555555C53F000000000000EC3F  - с 4:00 по 21:00
000000000000D83F000000000000E83F  - с 13:00 по 14:00

вот есть ещё мысль 1 час прогнать по всей шкале. То есть строки для интервалов [00:00 - 01:00], [01:00 - 02:00], [02:00 - 03:00], ... [23:00 - 00:00]
44 zak555
 
20.04.11
14:59
(43) может это кодировка г1с ?
45 nop
 
20.04.11
15:01
(44) боюсь предположить чем тогда её читать, не глазами явно. Даже если и не Г1С, то явно какого то гения
46 nop
 
20.04.11
15:06
значит, похоже что 1ая половина кода - это явно время начала интервала, а 2оя - соответственно. Причем кажется везде где время <> 0 в конце половин присутствует 3F, но может это потому что везде 00 минут, хотя вряд ли.
47 nop
 
20.04.11
15:08
похоже DES в (36) прав
48 nop
 
20.04.11
15:08
(47) + а автор программы тогда явно не прав. Жаль не могу ему это объяснить.
49 nop
 
20.04.11
15:31
0000000000000000000000186CC1463F000000166CC1563F000000111111613F - с [00:00 по 00:01] и [00:02 по 00:03]
50 nop
 
20.04.11
16:07
0000000000000000000000186CC1463F000000166CC1563F000000111111613F000000176CC1663F0000001CC7716C3F - с [00:00 по 00:01] и [00:02 по 00:03] и [00:04 по 00:05]
то есть типа так

0000000000000000000000186CC1463F - [00:00 по 00:01]
000000166CC1563F000000111111613F - [00:02 по 00:03]
000000176CC1663F0000001CC7716C3F - [00:04 по 00:05]

бред какой то. Выходит что 00:01 больше чем 00:03 математически
51 aleks-id
 
20.04.11
16:21
(50) нет. не больше. вспомни машинные коды. там числа хранятся справа налево
00 00 00 00 00 = 0:00
3F 46 C1 6C 18 = 0:01
3F 56 C1 6C 16 = 0:02
3F 61 11 11 11 = 0:03
3F 66 C1 6C 17 = 0:04
3F 6C 71 C7 1C = 0:05
и т.д.
52 nop
 
20.04.11
16:27
(51) да я вроде и слева направо смотрел и больше выходило
53 1Сергей
 
20.04.11
16:29
(52) побайтно справа налево
54 aleks-id
 
20.04.11
16:29
(52) ну вот гляди

3F ED 55 55 55 = 22:00
3F EE AA AA AA = 23:00
55 nop
 
20.04.11
16:31
хм ...
00000186CC1463F = 3F 46 C1 6C 18

ааа, точно, по 2 символа слева на право, ибо FF = 255 как бы
56 nop
 
20.04.11
16:41
(55) но вот тогда вопрос, вот 3F 46 C1 6C 18 - это одна секунда с начала дня. Число космическое конечно.

3F 46 C1 6C 18 = 0:01
3F 56 C1 6C 16 = 0:02

3F 56 C1 6C 16 - 3F 46 C1 6C 18 = FFFFFFE

не похоже то это числа
57 nop
 
20.04.11
16:41
текст ?
58 aleks-id
 
20.04.11
16:43
(56) не одна секунда а одна минута! 0ч. 00 м. и 0ч. 01м.
59 nop
 
20.04.11
16:45
(58) точно минута.
Я уже в ASCII пробовал переводить, бред вышел

3F = 63 = ?
46 = 70 = F
C1 = 193 = ?
6C = 108 = l
18 = 24 =
60 aleks-id
 
20.04.11
16:47
(59) давай сюда с точностью до секунды!
на 00:00:01,00:00:02,00:00:03,00:00:04 и 00:00:05
61 nop
 
20.04.11
16:55
(60) да к сожалению нету в интерфейсе программы с точностью до секунды
http://img194.imageshack.us/img194/8774/111nz.gif
62 nop
 
20.04.11
16:57
(61) так лучше видно http://img854.imageshack.us/img854/163/111h.gif
63 1Сергей
 
20.04.11
16:57
(61) (62) blocked_login
64 nop
 
20.04.11
16:58
65 aleks-id
 
20.04.11
16:59
и в какой базе они хранят это безобразие?
66 nop
 
20.04.11
17:02
67 aleks-id
 
20.04.11
17:23
пробуй к дате 30.12.1899 0:00:00 прибавить количество секунд из любого интервала
68 nop
 
20.04.11
17:28
(67) да пробовал уже, числа, что мы получили, всяко делают ariеhmetic overflow
Вот например 3F 46 C1 6C 18 = 271770020888
SELECT DateAdd(SECOND, 271770020888, CAST('1899-12-30 00:00:00.00' AS DateTime))


Descr=Arithmetic overflow error converting expression to data type int.
SQLState=22003
Number=-2147217833
Native Error=8115

Query batch completed with errors.

пробовал и задом наперед и прямо число
69 nop
 
20.04.11
17:30
SELECT DateAdd(millisecond, 271770020888, CAST('1899-12-30 00:00:00.00' AS DateTime)) - тоже переполнение
70 nop
 
20.04.11
17:32
(68) пробовал так же брать hex число в прямом и в обратном порядке без 3F которое везде в конце. Результат прибавления мало похож на начало дня (не важно какого дня)
71 nop
 
20.04.11
17:39
какой урод и чем такое хранение придумал ...
72 nop
 
20.04.11
17:41
(67) а если полагать что 3F 46 C1 6C 18 - это не целое, а дробное число ?
73 le_
 
20.04.11
17:55
Можт, попробовать с разработчиками связаться?..
74 nop
 
20.04.11
17:58
(73) после того как я начал вникать в их программу - я их боюсь. К тому же вряд ли с 2002 года кто то остался.
75 nop
 
20.04.11
17:58
(74) http://www.itvsystems.com.ua/ разработчик
76 aleks-id
 
20.04.11
20:02
(69) а ты попробуй в 1с сложить
77 DES
 
21.04.11
09:03
там не секунды, а часть суток.
78 DES
 
21.04.11
09:22
В следующей таблице показано, как хранятся значения даты/времени в Access:
  Двойное      Составляющая Реальная           Составляющая Реальное
  число        даты         дата               времени      время
  ------------------------------------------------------------------

       1,0         1        31 декабря 1899 г. 0,0          00:00:00
       2,5         2        1 января 1900 г.   0,5          12:00:00
   27468,96875   27468     15 марта 1975 г.   0,96875      23:15:00
   36836,125   36836        6 ноября 2000 г.   0,125         3:00:00
79 nop
 
21.04.11
10:08
(78) да, но у меня число вроде как целое
80 DES
 
21.04.11
15:55
8 байт - в каком признак ЦЕЛОГО числа ?
81 nop
 
21.04.11
15:58
(80) а если не целого, то где точку ставить?
Я уже как не переводил эти числа, и где точку не ставил - AddDate() SQL дает бред (гляжу по секундам результата)
82 DES
 
21.04.11
16:00
вещественные числа хранятся по стандарту
83 DES
 
21.04.11
16:00
учитывай метод хранения данных в памяти
84 nop
 
21.04.11
16:02
поясни пожалуйста, я уже нифига не сообращаю, ещё и десна нагноилась и колбасит температура
85 DES
 
21.04.11
20:13
Ну я не понимаю зачем тебе копаться в машинном представлении ?
Данные храняться в базе данных?
Обращайся к ним стандартно.
или я не понял задачи.
(Опиши задачу, возможно то чем ты занимаешься нафиг не нужно, а нужно использовать другой метод получения инфы о временных интервалах)
86 DES
 
21.04.11
20:30
http://educomp.org.ru/theory/store/dd3.html
3.6. Как перевести число?

В предыдущих разделах мы подробно изучили общие принципы представления вещественных чисел в компьютере. Видимо, настала пора применить эти принципы на практике. Сначала попробуем на листке бумаги, а потом перейдем к программному обеспечению.
Допустим, требуется представить в двоичном виде вещественное число -17,25. Выберем для простоты тип SINGLE как имеющий самый короткий по длине записи формат.
Прежде всего, переведем модуль числа, т.е. 17,25, в двоичную форму, как этому учит математическая теория: отдельно целую, и отдельно дробную части. В итоге получим:
10001,01
Нормализуем полученное число. Для этого согласно общепринятому определению потребовалось бы передвинуть запятую на 510 = 1012 разрядов влево, но в сопроцессоре принято старшую единицу выносить в целую часть (см. 3.1), поэтому получим:
10001,01*20 = 0,1000101*2101 = 1,000101*2100
Остается сформировать мантиссу, «скрыв» старшую единицу:
M = 0,000101
Как мы помним, в отличие от целых чисел, где отрицательные числа представляются в дополнительном коде, мантисса вещественных чисел хранится в прямом коде. Следовательно, больше никаких преобразований мантиссы не требуется.
Знаковый разряд необходимо установить в 1, поскольку число отрицательное: Z = 1. Теперь остается закодировать двоичный порядок 100. Для хранения порядка в числах типа SINGLE смещение равно 7F (см. таблицу в 3.4), так что смещенный порядок будет равен
ES = 100 + 111 1111 = 1000 0011
Собирая теперь Z, ES и M в единое 32-разрядное число, окончательно получаем:
1 10000011 0001010 00000000 00000000
Или более компактно в шестнадцатеричной системе – C1 8A 00 00. Этот код и будет записан в ОЗУ, правда байты при этом, как мы знаем, будут переставлены.
Не думаю, что описанная процедура сложна по своей сути, но технической работы требуется много. А значит, велика вероятность ошибиться. Поэтому для проверки неплохо бы иметь специальное учебное программное обеспечение, способное для введенного десятичного числа выдать его внутренне представление и, наоборот, расшифровать прочитанные из ячеек ОЗУ значения. Этим мы сейчас и займемся.
87 nop
 
22.04.11
10:56
(85) да, эти уродские наборы буккоф, что мы здесь обсасываем, хранятся в БД. Вот здесь http://img822.imageshack.us/f/111og.gif/ колонка Intervals
88 DES
 
22.04.11
12:35
а те что нужно?
нельзя ли самому из 2 колонок "старт и финиш" вычислить интервал ?
89 nop
 
22.04.11
12:36
(88) о каких колонках ты говоришь?
90 DES
 
22.04.11
12:38
дело в том что эти значения могут быть вычисляемы для конкретного устройства исполнителя в его единицах.
Например в тиках, или тактах какого то там генератора.
Тебе зачем конкретно эти значения расшифровывать?
Конкретно!
91 DES
 
22.04.11
12:39
(89) 2-х предидущих
92 nop
 
22.04.11
12:46
(90) я буду отображать пользователю, который будет переводить своего человека из одной смены в другую, что именно представляет собой "Смена А" с точки зрения графика (временные интервалы это с 09:00 - 13:00 работает, с 13:00 - 13:30 обед, с 13:30 - 17:30 работает).
Так же эта же информация полезна при корректировке табеля рабочего времени.

Если вообщем и просто: я ковыряю БД программы проходной, которая работает с турникетами. Я это делаю для улучения ведения табелирования в 1С и для того что бы начальники отделов могли сами своих людей из смены в смену определять.
93 DES
 
22.04.11
13:08
ну так может ты не там ковыряешь.
колонки старт финишь разве не для этого ?
94 nop
 
22.04.11
13:16
(93) Universum_Start, Universum_Finish ? Обрати внимание, они во всей таблице одинаковы. Я думал что это базы даты для старт и финищ интервала, но всякое прибавление чисел из из Intervals дает бред.
95 DES
 
22.04.11
13:27
зачем прибавлять ?
измени в программе данные, посмотри в базе изменения (в этих 2-х колонках)
96 DES
 
22.04.11
13:27
И забудь про Intervals
97 nop
 
22.04.11
13:31
(95) именно Intervals содержит информацию. Зачем те 2 колонки я предположил в (94)
Ничего указывающего на Universum_Start, Universum_Finish  в интерфейсе программы нет и быть не может. http://img854.imageshack.us/i/111h.gif/
Их просто невозможно изменить из программы, они во всех таблице одинаковы, в интерфейсе им нет соответствия.
98 DES
 
22.04.11
13:45
Тогда это может быть просто битовая карта
Каждый закрашеный квадратик эквавалентен биту
99 DES
 
22.04.11
13:47
это конечно хрень, просто как предположение
100 DES
 
22.04.11
13:47
а на самом деле см. (86)
101 DES
 
22.04.11
13:50
что ты хотел сказать "вот там 3 интр по минуте"
102 DES
 
22.04.11
14:01
делай картинку интервала 00:00 до 00:01
и покажи как в базе

делай картинку интервала 00:01 до 00:02
и покажи как в базе
103 nop
 
22.04.11
14:16
(102) я пишу скрипт на AutoIT он будет мышкой клацать по программе и SELECT выбирать значения из базы. Я составлю таблицу соотвествий с точность до минуты

555555555555C53F = 0:01
000000000000EC3F = 0:02
........
555555555555C53F = 23:59
104 TeddySlaf
 
22.04.11
16:36
ну и как с таблицей?
105 nop
 
22.04.11
16:51
(104) пока успешно ленюсь
106 DES
 
22.04.11
17:25
ну все расковырял я тебе твою фигню:
Дано: 6C 71 C7 1C = 0:05
Доказательство:
3F 6C 71 C7 1C 00 00 00 <- 8 байт
по-человечески это
0,00347222221898846
умножаем на 24
0,0833333332557216
0, <- 0 часов
умножаем на 60 (переводим в минуты, т.к. это часть часа)
4,999999995343296 <- 5 мин

еще раз, ты говоришь:
555555555555C53F <- это 04:00
по-чел.
0,166666666666667
*24
4,000000000000008 <- 4 часа хрен знает скока нанопиктосекунд
107 nop
 
22.04.11
17:27
(106) О_О
108 nop
 
22.04.11
17:29
(106) как ты превратил 6C 71 C7 1C 00 00 00 в дробное число 0,00347222221898846  ???
109 DES
 
22.04.11
17:29
(106) хранится в виде нормализованного вещественного числа
3F C5 55 55 55 55 55 55
0(знак) 03FC(порядок) 05 55 55 55 55 55 55(мантисса)
несмещенный порядок -0003, полная мантисса + 15 55 55 55 55 55 55
110 nop
 
22.04.11
17:32
00 00 00 1C C7 71 6C 3F - вот так в программе хранится 0:05
111 nop
 
22.04.11
17:34
(109) мда, впервые жалею что забил на тему "хранение числе с плавающей точкой"
112 nop
 
22.04.11
17:34
спасибо огромное!
113 DES
 
22.04.11
17:35
(110) это значит 3F 6C 71 C7 1C 00 00 00
114 DES
 
22.04.11
17:37
давай любой код = скажу скока часов и мин
115 nop
 
22.04.11
17:37
(113) это я помню
116 nop
 
22.04.11
17:39
(114) хехе, ща
117 nop
 
22.04.11
17:40
(114) 00 00 B0 05 5B B0 D1 3F 00 00 66 66 66 66 E7 3F
118 DES
 
22.04.11
17:42
2 часть
0,73124999999709
* 24
17,54999999993016
17 часов 33 мин
119 DES
 
22.04.11
17:46
не знаю на чем ты пишешь и на каком языке обучался программингу, но в паскале есть структура
что все заданные в ней варианты «накладываются» друг на друга, т.е. каждому из них выделяется одна и та же область памяти.
var
mem8 : record case Byte of
0 : (by : array'[0..8] of Byte);
1 : (lo : Real);
end;
записваешь как 8 байт, считываешь как вещественное
120 nop
 
22.04.11
17:47
(118) охренеть! Верно
121 nop
 
22.04.11
17:49
(119) уже лет 6 1с токо. На PHP пару работ было. А учился на Си и т.п.
122 DES
 
22.04.11
17:52
(119)+  0 : (by : array'[0..7] of Byte);  
очепатка
123 TeddySlaf
 
22.04.11
17:52
прям криптологией казалось, а вон оно как несложно получилось.

Спасибо DES за "шахматный" турнир. :)
124 DES
 
22.04.11
17:54
(123) не все так сложно как кажется и не все так просто как видится... ;))
125 nop
 
22.04.11
18:01
DES спасибо! Теперь я могу продолжать дальше, начну уже ваять свой интерфейс для этой проги.
126 TeddySlaf
 
22.04.11
18:04
(124) я все на это со стороны смотрел, т.е. особо не представил как оно в реальности было.
Скажи - разработчик использовал обычные средства программирования (типа число часов, например, 4,5, сохранял как вещественное число), или все-таки примелял какой-то мудреный алгоритм сохранения этих часов?
127 DES
 
22.04.11
18:21
это встроенная в язык функция обработки времени (наверное)
128 nop
 
22.04.11
18:24
(127) писалось на чем то борландовском, то ли Си то ли Делфи
129 TeddySlaf
 
22.04.11
18:33
(128) судя по иконке слева вверху на форме - это Дельфи7.
130 TeddySlaf
 
22.04.11
18:41
(129) тут такая иконка:
http://www.itvsystems.com.ua/ru/soft/gg.htm
131 nop
 
22.04.11
20:59
(129) точяк. Я последний раз писал на 5ом. А раньше вообще была иконка ввиде храма: пол 3 колоны и крыша треугольная
132 nop
 
26.04.11
11:09
охох... теперь надо это как то представить и закодить
http://uchebnik1.narod.ru/chislo.html
133 nop
 
27.04.11
10:13
DES как ты преобразовал число, распиши поэтапно пожалуйста. По методичкам нифига у меня не выходит
134 nop
 
27.04.11
10:22
http://www.sgu.ru/prcnit/teach/3.php
Найдем реальный порядок, от порядка со смещением отнимем величину смещения 127(10),
Pреал=100001012-011111112=1102=610.

Вот на этом всяко не получается
Для 00 00 66 66 66 66 E7 3F --> 3F E7 66 66 66 66 00 00 величина смещения = 1023(10) = 1111111111(2) и Pреал получается космическое.

Например
3F E7 66 66 66 66 00 00 = 0011111111100111011001100110011001100110011001100000000000000000
0 - знак
0111111111 - порядок
00111011001100110011001100110011001100000000000000000 - мантиса

0111111111 - 1111111111 = лишком много
135 DES
 
27.04.11
14:59
0  => +
011 1111 1110 = 1022 (-1023) =>-1
0111011001100110011001100110011001100000000000000000 =>1.0111011001100110011001100110011001100000000000000000
сдвигаем на 1 туда ->
0.101110110011001100110011001100110011000000000000000
1/2+0+1/8+1/16+1/32+1/64+0+1/256+....
=0,72265625.......
где то так
136 DES
 
27.04.11
15:00
(135) а (119) смотрел ?
137 nop
 
27.04.11
15:40
(136) смотрел, это значит что 8 байт могут содержать Double 8 байт, а могут Real 6 байт.
Только как эти знания применять мне - не пойму.

Вот хорошо описано http://comp-science.narod.ru/Cod/cod.html
Но считать пока я не приловчился, все проблема со (смещением) порядком.

Вот, играю этим
http://www.binaryconvert.com/result_double.html?hexadecimal=3F6C71C71C000000
http://www.binaryconvert.com/result_double.html?hexadecimal=3FC5555555555555

пытаюсь представить как читать и как преобразовывать
138 CoolCat
 
27.04.11
15:41
(137) а вообще че нужно сделать???
139 nop
 
27.04.11
15:49
(138) преобразовать эти числа во время формата ЧЧ:ММ
DES это удалось, представив что исходное число - это вещественное число.
Вот читаю его пояснения - вроде все понятно. А пробую пересчитать ... все не то что то
140 DES
 
27.04.11
16:42
(137) не верно. Real тоже 8 байт занимает
смотри. ты резервируешь место в памяти, 8 байт
даешь этой области 2 метки.
одна возращает эту область как символьная строка
другая как вещественное число.
Ты считываешь из базы данные побайтно и пишешь их как строку в эту область по втрой ссылке, и тут же читаешь эту же область по первой ссылке и получаешь вещественное число.
никаких манипуляций с битами не нужно.
А проще всего и правильнее сразу применять тип "время" к полю базы данных при считывании.

З.Ы. Если не получается преобразование делай тут свой алгоритм по шагам, я тебе буду подтвержать каждый шаг.
141 DES
 
27.04.11
16:48
(137) ну там же все показано. что не так с порядком ?
http://www.binaryconvert.com/result_double.html?hexadecimal=3FE7666666666666
142 DES
 
27.04.11
16:52
см как 1 отображается ;)
http://www.binaryconvert.com/result_double.html?decimal=048049
143 nop
 
27.04.11
16:59
(140) спасибо, мне нужен каждый шаг - потому что я буду читать из БД 1ской
144 nop
 
27.04.11
17:11
1. берем число 3F E7 66 66 66 66 (0x00003FE766666666)

2. переводим в двоичное 0000000000000000001111111110011101100110011001100110011001100110

3. Разбиваем
0|00000000000|0000001111111110011101100110011001100110011001100110
M| exp len 11| mantissa

4. Переводим exp в 10чный вид = 0 и отнимаем 1023 согласно таблице http://www.sgu.ru/prcnit/teach/3.php

получаем -1023

Что дальше ... ?
145 DES
 
27.04.11
17:11
1. неверно
146 nop
 
27.04.11
17:13
(145) 3FE7666666660000 ?
147 DES
 
27.04.11
17:16
ну да!
148 DES
 
27.04.11
17:17
как будешь считывать из базы? покажи код
149 nop
 
27.04.11
17:18
1. берем число 0x3FE7666666660000

2. переводим в двоичное 0011111111100111011001100110011001100110011001100000000000000000

3. Разбиваем
0|01111111110|0111011001100110011001100110011001100000000000000000
M| exp len 11| mantissa

4. Переводим exp в 10чный вид = 1022 и отнимаем 1023 согласно таблице http://www.sgu.ru/prcnit/teach/3.php

получаем -1

Что дальше ... ?
150 nop
 
27.04.11
17:21
(148) а кода нет, есть SQL запрос, в колонке которого SQL двоичные данные сам приводит к виду как в (0)
151 DES
 
27.04.11
17:21
мантиссу выдели
152 DES
 
27.04.11
17:21
пока;и код SQL
153 nop
 
27.04.11
17:21
(151) 0111011001100110011001100110011001100000000000000000
154 DES
 
27.04.11
17:22
восстанавливаем 1.00000000000000 (целую часть)
1.0111011001100110011001100110011001100000000000000000
155 nop
 
27.04.11
17:29
(152) SELECT     TimeLine.* FROM         TimeLine

http://img8.imageshack.us/i/111ui.gif/
156 nop
 
27.04.11
17:30
(154) целая часть всегда (для любого исходного числа) = 1 ?
157 nop
 
27.04.11
17:36
1.0111011001100110011001100110011001100000000000000000 x 2^-1 = 0.0111011001100110011001100110011001100000000000000000

тут у меня есть вопрос: что будет если степень <> -1 ?
Например 1, 2, 3 ... ?
158 nop
 
27.04.11
17:37
^1 = 1.0111011001100110011001100110011001100000000000000000
^2 = 4.0111011001100110011001100110011001100000000000000000
^3 = 8.0111011001100110011001100110011001100000000000000000

?
159 DES
 
27.04.11
17:46
нет, ну ты не чуди
"порядок" показывает куда и насколько сдвинуть мантиссу
если с минусом то бинарным сдвигом туда -> т.е. делить
если с + то сюда <- т.е. умножить

целая 1 подразумевается всегда, поэтому ее не хранят.
чтоб всегда была целая 1, ее получаю сдвигом исходного числа в бинари формате и количество сдвигов запоминают в порядке, после этого её убирают и не хранят
160 DES
 
27.04.11
17:46
нет, ну ты не чуди
"порядок" показывает куда и насколько сдвинуть мантиссу
если с минусом то бинарным сдвигом туда -> т.е. делить
если с + то сюда <- т.е. умножить

целая 1 подразумевается всегда, поэтому ее не хранят.
чтоб всегда была целая 1, ее получаю сдвигом исходного числа в бинари формате и количество сдвигов запоминают в порядке, после этого её убирают и не хранят.
161 DES
 
27.04.11
17:54
я в 8 не курю, но раньше в скуле фохпро я задавал формат поля с помощью union

Попробуй типа так:
select dist '00:00' as "time", 0 as "DUMMY" from TimeLine
UNION
 SELECT Intervals as "time", 1 as "DUMMY" FROM TimeLine

или

select dist 0.0 as "time", 0 as "DUMMY" from TimeLine
UNION
 SELECT Intervals as "time", 1 as "DUMMY" FROM TimeLine

идея такая, первый селект задает тип поля а второй селект тянет данные и преобразовывает их к уже заданному типу поля.

у тебя может получиться сразу вещественный тип
162 DES
 
27.04.11
17:57
или поищи функцию под 1С преобразования чисел (или компоненту)
163 nop
 
27.04.11
18:18
(158) ^1 = 1+1 знак перед запятой, т.е. 10,111...
^2 = 1+2 знак перед запятой, т.е. 101,11...
^3 = 1+3 знак перед запятой, т.е. 1011,1...

верно ?

(161)
Сообщение 8163, уровень 16, состояние 4, строка 1
The text, ntext, or image data type cannot be selected as DISTINCT

к тому же в MSDE 2000 нет типа Time - оно не поймет как преобразовать
164 DES
 
27.04.11
18:24
Select  0.0 as "time", 0 as "DUMMY" from TimeLine next 1
UNION ALL
SELECT Intervals as "time", 1 as "DUMMY" FROM TimeLine
165 nop
 
27.04.11
18:25
(164) преобразовать к double? Пробую
166 DES
 
27.04.11
18:25
нет, там формат тоже нужен, поэтому так:

Select  000.0000000000000000 as "time", 0 as "DUMMY" from TimeLine next 1
UNION ALL
SELECT Intervals as "time", 1 as "DUMMY" FROM TimeLine
167 nop
 
27.04.11
18:26
(164) Сообщение 170, уровень 15, состояние 1, строка 1
Line 1: Incorrect syntax near '1'.
168 DES
 
27.04.11
18:27
хотя там 2 значения в поле
169 nop
 
27.04.11
18:27
без next 1

Сообщение 206, уровень 16, состояние 2, строка 1
Operand type clash: image is incompatible with numeric
170 nop
 
27.04.11
18:28
image - это Intervals
171 DES
 
27.04.11
18:31
(168)
172 DES
 
27.04.11
18:32
ну тогда ой
173 nop
 
27.04.11
18:32
мне пора на транспорт, спасибо за помощь. Завтра продолжу
174 DES
 
27.04.11
18:36
что такое сдвиг битов в байте!!!
0x0F = 00001111
сдвигаем вправо 00000111 (делим на 2)
влево 00011110 (умножаем на 2)

поэтому 1.0111011001100110011001100110011001100000000000000000
сдвиг на -3 (например), переносим запятую на 3 знака  0.0010111011001100110011001100110011001100000000000000000
сдвиг на 3 тоже на 3знака но в другую сторону
1011.1011001100110011001100110011001100000000000000000
175 nop
 
27.04.11
21:00
(174) да, спасибо. Я вроде так и написал.
Целочисленный сдвиг вопросов не вызывает, а здесь - сдвиг запятой. Заниматься буду завтра.
176 nop
 
28.04.11
13:07
а почему везде сказано что смещение 10 битов, а мы фактически берем 11 в (149) и вообще ?
177 DES
 
28.04.11
13:48
в (144) ты сам указал 11
178 DES
 
28.04.11
13:51
Select  000.0000000000000000 as "time", 0 as "DUMMY" from TimeLine next 1
UNION ALL
SELECT StrLeft(Intervals,8) as "time", 1 as "DUMMY" FROM TimeLine

StrLeft() - не помню строковые функции , но проробуй выбирать строку 8 символов. Может она преобразуется в вещественное
179 nop
 
28.04.11
14:04
(177) так верно ж указал?
(178) пробую
180 nop
 
28.04.11
14:07
(178) что такое NEXT 1 ? MSDE постоянно ругается

Сообщение 170, уровень 15, состояние 1, строка 1
Line 1: Incorrect syntax near '1'.
181 DES
 
28.04.11
14:21
ну тогда без него
182 nop
 
28.04.11
14:44
только так нету ошибок, но в результате - бредовые данные

Select  '000.0000000000000000' as "time", 0 as "DUMMY" from TimeLine
UNION ALL
SELECT SubString(Intervals, 1, 100) as "time", 1 as "DUMMY" FROM TimeLine
183 nop
 
28.04.11
14:52
ооо!! Вот это круто! SELECT CAST(CAST(123 as Binary) AS Int)
184 DES
 
28.04.11
14:57
че это ? в результате?
185 DES
 
28.04.11
15:02
тебе нужно разбить Intervals на две части и каждую преобразовать в Real
select CAST(left(Intervals,8) as real), CAST(right(Intervals,8) as real)
186 DES
 
28.04.11
15:06
(182) какой тип получился у поля "time" ?
187 nop
 
28.04.11
15:07
(185) эксперементирую.

SELECT CONVERT(real, CONVERT(varchar(100), SUBSTRING(CONVERT(image, '000066666666E73F'), 1, 100)))

Сообщение 8114, уровень 16, состояние 5, строка 7
Error converting data type varchar to real.

(186) только строковые типы получались с UNION или ошибка
188 Salimbek
 
28.04.11
15:10
(185) У него там может храниться несколько интервалов, например "с 3:00 до 5:00"+"с 6:00 до 11:30"+"с 21:00 до 23:00", поэтому великомудрые проектировщики базы, вместо нормального пути - создания доп. таблицы и связи по ключу 1-N, запихали все в бинари
189 Salimbek
 
28.04.11
15:11
(187) Попробуй сразу сконвертировать в Реал, без промежуточного varchar
190 nop
 
28.04.11
15:15
оооо

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=81849
Convert a binary float to FLOAT datatype
191 nop
 
28.04.11
15:16
(188) эта проблема решаема с помощью SUBSTRING()
192 DES
 
28.04.11
15:22
(190) ну, все. Спасибо.
193 DES
 
28.04.11
15:24
Select  '000.0000000000000000' as "time", 0 as "DUMMY" from TimeLine
конечно строковые, ты же кавычки влепил
нада так
Select  000.0000000000000000 as "time", 0 as "DUMMY" from
194 nop
 
28.04.11
15:25
(190) не прикольно :(

SELECT dbo.fnBinaryFloat2Float(CAST(12.34 AS Binary(8)))

5,07695883741527E-299
195 DES
 
28.04.11
15:31
чейто ?
196 nop
 
28.04.11
15:32
(195) это функция из (190) на деле
197 DES
 
28.04.11
15:53
нука изобрази

SELECT dbo.fnBinaryFloat2Float(0x3FF0000000000000)
198 nop
 
28.04.11
16:01
(197) = 1
199 nop
 
28.04.11
16:03
SELECT dbo.fnBinaryFloat2Float(0x3F6C71C71C000000) = 0,00347222221898846

это 00:05 в программе
200 nop
 
28.04.11
16:06
Еперный балет

SELECT dbo.fnBinaryFloat2Float(0x3FE7666666660000) = 0,73124999999709

(117) = (118) - как ты и расшифровал!
201 nop
 
28.04.11
16:25
значит теперь надо писать функцию на SQL которая переставит байты 3FE766666666 -->  3FE7666666660000
202 nop
 
28.04.11
16:26
(201) вот так 00 00 66 66 66 66 E7 3F --> 3F E7 66 66 66 66 00 00
203 DES
 
28.04.11
17:13
ну, удачи...
204 nop
 
28.04.11
17:26
ох, ну его нафиг этот СКЛ, я уже на 1с начал кодить преобразование и вроде все ок идет пока
205 nop
 
28.04.11
17:27
DES спасибо ещё раз! Ты спас не 1 мой нерв