|
|
|
помогите расшифровать структуру | ☑ | ||
|---|---|---|---|---|
|
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
|
(65) MSDE MS SQL 2000 http://img822.imageshack.us/i/111og.gif/
|
|||
|
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
|
||||
|
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 мой нерв
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |