Форум программистов, компьютерный форум CyberForum.ru

Как кодираются дробные числа в пакетах? - C++

Восстановить пароль Регистрация
 
Mathers
0 / 0 / 0
Регистрация: 17.01.2012
Сообщений: 9
21.01.2012, 04:42     Как кодираются дробные числа в пакетах? #1
Пытаюсь снифером ловить пакеты и доставать из них данные.
В частности несколько приходящих чисел интересует. Целые числа легко находятся, а вот дробные непонятно как искать. Например есть вот такой кусок хекса:
12 14 09 48 E1 7A 14 AE 77 60 40 10 11 1A 07 08 DC CC DE 3D 10 04 1A 14 09 8F C2 F5 28 5C 77 60 40 10
Здесь точно присутствуют числа 131.74 и 131.73 (предполагаю, что где то на местах, помеченных жирным, но не факт), но как ни перегонял их в хекс и отдельно целые и дробные части, и всё вместе - никак не выходит ничего содержащегося в этой строке.
Собственно вопрос тем кто сталкивался: как в пакетах представляются дробные числа и как узнать на каких позициях они стоят. Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2012, 04:42     Как кодираются дробные числа в пакетах?
Посмотрите здесь:

целые и дробные числа C++
C++ Дробные числа, С++
C++ дробные числа
Дробные числа C++
C++ Дробные числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Black Fregat
 Аватар для Black Fregat
1353 / 983 / 215
Регистрация: 31.05.2009
Сообщений: 4,093
21.01.2012, 05:48     Как кодираются дробные числа в пакетах? #2
Обычное представление с плавающей точкой:
Код
131.74: 48 E1 7A 14 AE 77 60 40
131.73: 8F C2 F5 28 5C 77 60 40
Mathers
0 / 0 / 0
Регистрация: 17.01.2012
Сообщений: 9
21.01.2012, 14:38  [ТС]     Как кодираются дробные числа в пакетах? #3
Цитата Сообщение от Black Fregat Посмотреть сообщение
Обычное представление с плавающей точкой:
Код
131.74: 48 E1 7A 14 AE 77 60 40
131.73: 8F C2 F5 28 5C 77 60 40
Спасибо! А как можно вручную перегнать одно в другое (с помощью калькулятора с hex->dec конвертацией чисел)? Пока получается только программным путём через BitConverter.

И еще: здесь так же присутствует время где то между этими числами. Не подскажите каким образом время кодируется?
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
21.01.2012, 14:55     Как кодираются дробные числа в пакетах? #4
ну так прочитай о представлении чисел с плавающей точкой в компьютере. хоть на той же вики.

чтобы понять как закодировано время, нужно знать что из себя представляет структура, представляющая время в языке. наверняка это большое число, показывающее число миллисекунд с начала дня.
Mathers
0 / 0 / 0
Регистрация: 17.01.2012
Сообщений: 9
24.01.2012, 23:01  [ТС]     Как кодираются дробные числа в пакетах? #5
Спасибо. И последний вопрос: каким образом происходит конвертация для чисел более 255? Например вот такое соответствие:
AC 02 <-> 300
F4 03 <-> 500
94 23 <-> 4500
88 40 <-> 8200
Пробовал через BitConverter перегонять, получается совсем не то.

Добавлено через 19 часов 55 минут
Цитата Сообщение от Mathers Посмотреть сообщение
Спасибо. И последний вопрос: каким образом происходит конвертация для чисел более 255? Например вот такое соответствие:
AC 02 <-> 300
F4 03 <-> 500
94 23 <-> 4500
88 40 <-> 8200
Пробовал через BitConverter перегонять, получается совсем не то.
Путём долгих плясок с бубном в поисках закономерности нашел вот что:
обе части перегоняются в десятиричную систему, "вторая часть минус один" умножается на 128 и складывается с первой. Получается искомый результат. Например

F4 03 -> 244 3 -> 244 + (3-1)*128 -> 244 + 256 -> 500

вот такой хитрый алгоритм. поэтому вопрос: есть ли в .NET какая нибудь функция которая автоматически делает такую конвертацию?
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
25.01.2012, 12:57     Как кодираются дробные числа в пакетах? #6
Путём долгих плясок с бубном в поисках закономерности нашел вот что
94 23 <-> 4500
88 40 <-> 8200
Закономерность твоя не работает для двух последних случаев
И вообще это полная фигня
Скорее всего ты просто неправильно цифры получил из пакета
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2012, 02:19     Как кодираются дробные числа в пакетах?
Еще ссылки по теме:

Не учитывает дробные числа C++
Rand, которая генерирует как целые, так и дробные числа C++
Дробные числа C++

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

Или воспользуйтесь поиском по форуму:
Mathers
0 / 0 / 0
Регистрация: 17.01.2012
Сообщений: 9
26.01.2012, 02:19  [ТС]     Как кодираются дробные числа в пакетах? #7
Цитата Сообщение от odip Посмотреть сообщение
Закономерность твоя не работает для двух последних случаев
И вообще это полная фигня
Скорее всего ты просто неправильно цифры получил из пакета
Ну почему же, работает. Обе части предварительно из hex в dec переводятся:
94 23 -> 148 35 -> 148 (35-1)*128 -> 148 + 4352 -> 4500

Но собственно и без всяких функций первую часть складываю с умноженной второй. Дешево и сердито.
Так что тему можно удалять. Всем спасибо!
Yandex
Объявления
26.01.2012, 02:19     Как кодираются дробные числа в пакетах?
Ответ Создать тему
Опции темы

Текущее время: 04:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru