Форум программистов, компьютерный форум, киберфорум
Наши страницы
Криптография
Войти
Регистрация
Восстановить пароль
 
DarkAbsent
1 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 7
1

Подскажите формат данных

06.12.2013, 15:26. Просмотров 436. Ответов 8
Метки нет (Все метки)

Приветствую!
Есть некоторые десятичные числа, программа записывает их в базу в двоичное поле типа IMAGE, подавая на вход разные значения отловил 2 байта которые меняются в базе, и получилась таблица соответствий:
00 0000
01 803F
02 0040
03 4040
04 8040
05 A040
06 C040
07 E040
08 0041
09 1041
10 2041
20 A041
30 F041
40 2042
50 4842
100 C842
150 1643
200 4843
задача: имея значения со второго столбца получить цифру из первого.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2013, 15:26
Ответы с готовыми решениями:

Подскажите формат
Подскажите формат графического файла, в котором прозрачность не только есть,...

Подскажите формат даты/времени
Здравствуйте! Подскажите пожалуйста формат даты/времени 29.03.2016 13:32:49 -...

подскажите формат храниения для 24Cxx
в среднем раз в 30 сек надо записать 100 байт. при заполнеии всё одним пакетом...

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

какой формат базы данных DSN Access (атрибуты и типы данных) ?
В настройках IIS можно выбирать формат журнала, один из форматов - это DSN...

8
gazlan
3141 / 1917 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
07.12.2013, 02:26 2
Разбиваете на группы (по степеням двойки), три младшие тетрады отвечают за индекс группы, старшая - за индекс внутри группы. Формулу лень выводить.
1
Миниатюры
Подскажите формат данных  
DarkAbsent
1 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 7
09.12.2013, 11:00  [ТС] 3
Не понял про индексы группы, можно немного раскрыть для недоматематика, пожалуйста
0
gazlan
3141 / 1917 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
09.12.2013, 12:23 4
Цитата Сообщение от DarkAbsent Посмотреть сообщение
Не понял про индексы группы
Прямо по картинке, разбиваете входные значения на диапазоны: 0 - 0, 1 - 1, 2 - 3, 4 - 7, 8 - 15, 16-31 .. 2N - (2N+1 - 1) .. 128 - 255.
Устройство трех младших тетрад определяются диапазоном (индексом группы) - внутри каждой группы все значения последовательно нумеруются по одному правилу, для разных групп правила различны.
1
Ab
75 / 75 / 1
Регистрация: 03.05.2012
Сообщений: 161
09.12.2013, 13:12 5
gazlan
Я вроде не новичок в предметной области, но тоже не понял. Какой смысл разбивать весь диапазон возможных значений на неравные поддиапазоны? Как последний поддиапазон размером 32К можно упаковать в 3 мл. тетрады, т. е. в 4К?

DarkAbsent
2 варианта:
1) Если "программа записывает" числа в базу, то из нее и надо алгоритм вытаскивать: искать кусок кода, который преобразует вход в выход, и смотреть, что происходит.
2) Поскольку размер числа 2 байта, то можно просто прогнать через программу 64К значений, получить полную таблицу соответствий и дальше пользоваться ей.
1
gazlan
3141 / 1917 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
09.12.2013, 14:08 6
Цитата Сообщение от Ab Посмотреть сообщение
gazlan
Какой смысл разбивать весь диапазон возможных значений на неравные поддиапазоны? Как последний поддиапазон размером 32К можно упаковать в 3 мл. тетрады, т. е. в 4К?
Там нет 32К. По скриншоту видно, что каждая группа (диапазон) кодируется своим кодом младших тетрад, а значения внутри группы - кодом старшей тетрады (исключая, возможно, последнюю, для которой зависимы две старшие тетрады).

Иными словами, такое разбиение позволяет свести исходную задачу к двум меньшей размерности. Думаю, если не полениться, то можно продолжить до аналитической формулы, но тогда лучше бы иметь полную таблицу.
1
Ab
75 / 75 / 1
Регистрация: 03.05.2012
Сообщений: 161
09.12.2013, 15:31 7
gazlan
Наверное, я чего-то недопонимаю... Probably I'm old and stupid...

1) Смотрю на рисунок. 150 и 200 в одном поддиапазоне (128..255), но 3 мл. тетрады у них разные. Как это укладывается в вашу теорию?
2) Внутри поддиапазона у нас всего 4 бита остается. Как в них впихнуть значения 128..255?
3) Возьмем число побольше, скажем, 50'000. Следуя вашей логике, оно будет в поддиапазоне 32768..65535 размером 32К. И как эти 32К втиснуть в одну 4-битную тетраду? Или даже в 3 тетрады? 15 битов не поместить ни в 4, ни в 12. Нет?
1
DarkAbsent
1 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 7
09.12.2013, 16:04  [ТС] 8
Разобрался, кто бы мог подумать что int в базу записывается как float,
всё оказалось совсем просто:

01 803F hex2float(3F800000) = 1
02 0040 hex2float(40000000) = 2
150 1643 hex2float(43160000) = 150
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
function hex2float($number) {
    $binfinal = sprintf("%032b",hexdec($number));
    $sign = substr($binfinal, 0, 1);
    $exp = substr($binfinal, 1, 8);
    $mantissa = "1".substr($binfinal, 9);
    $mantissa = str_split($mantissa);
    $exp = bindec($exp)-127;
    $significand=0;
    for ($i = 0; $i < 24; $i++) {
        $significand += (1 / pow(2,$i))*$mantissa[$i];
    }
    return $significand * pow(2,$exp) * ($sign*-2+1);
}
Спасибо за помощь, глядя на вашу дискуссию меня посетила мысль с float`ом.
0
gazlan
3141 / 1917 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
09.12.2013, 17:18 9
Цитата Сообщение от DarkAbsent Посмотреть сообщение
Разобрался, кто бы мог подумать что int в базу записывается как float
Гм. Вот оно что :-)

Добавлено через 3 минуты
Цитата Сообщение от Ab Посмотреть сообщение
gazlan
Наверное, я чего-то недопонимаю...
Нет, вы правы.

Я изначально (ошибочно) считал, что левая колонка - это всегда BYTE (а не INT).
0
09.12.2013, 17:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2013, 17:18

Не открывается база данных Access , пишет неразпознаваемый формат базы данных
Не открывается база данных Access , пишет неразпознаваемый формат базы...

Подскажите как из delphi изменить формат ячейки Excel?
Не получается изменить формат ячейки Excel с общего на числовой с двумя знаками...

Подскажите, как определить формат чего-либо введенного с клавиатуры?
Т.е я вывожу сообщение типа:&quot;Введите элементы матрицы..&quot; и если вводится...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru