04.02.2016, 15:00 | #161 | |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Цитата:
А если не смещать на 4, то нужно битовую маску? buf[0] & 0xF0 ? |
|
04.02.2016, 15:03 | #162 |
Старший Пользователь
Регистрация: 01.04.2010
Регион: 35
Сообщений: 697
|
|
04.02.2016, 15:06 | #163 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Короче я со смещениями опять всё перепутал...
Куда чего надо смещать или с какой маской плюсовать чтоб узнать длину пакета? Помогите плиз- чайник я в этом. |
04.02.2016, 15:26 | #164 |
Старший Пользователь
Регистрация: 01.04.2010
Регион: 35
Сообщений: 697
|
|
04.02.2016, 16:08 | #165 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Вот что получилось.
Кстати почему не работает вот такой способ узнать длину массива int i = DataBuf.length? PHP код:
|
04.02.2016, 16:37 | #166 |
Старший Пользователь
Регистрация: 01.04.2010
Регион: 35
Сообщений: 697
|
|
04.02.2016, 18:47 | #167 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
|
04.02.2016, 18:49 | #168 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
вот полный код
PHP код:
|
04.02.2016, 19:13 | #169 | |
Старший Пользователь
Регистрация: 01.04.2010
Регион: 35
Сообщений: 697
|
Цитата:
buf[0] & 0x0F * 256 = 0 buf[1] = 0D Length = (buf[0] & 0x0F * 256 + buf[1]) = 0D общая длина сообщения. Теперь First frame количество значащих байт 6 j = 0; for (int i=2; 6;i++){ DataBuf[j] = buf[i]; j++; } Теперь судя по логу надо искать 21 и со следующего байта копировать 7 или (Length - 6) байт если (Length - 6) < 7 потом искать 22 если надо и так далее пока не скопируете Length байт. В этом случае в DataBuf будет посылка без обрамления и DataBufSize = Length. К сожалению я не знаю язык на котором вы пишите. |
|
04.02.2016, 19:15 | #170 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
модифицировал чтоб видить пакеты
PHP код:
PKG: 10 D 10 1D 13 10 4E 52 FIRST Length=-6 PKG: 21 4A 31 30 34 2E 32 B0 PKG: 10 D 10 1D 12 10 4D 41 FIRST Length=-6 PKG: 21 58 49 4D 55 4D 20 80 PKG: 10 D 10 1D 11 10 20 4D FIRST Length=-6 PKG: 21 2D 43 41 52 4C 4F 90 PKG: 10 D 10 1D 10 10 20 20 FIRST Length=-6 PKG: 21 4A 61 7A 7A 20 20 90 PKG: 10 D 10 1D F 10 46 4D FIRST Length=-6 PKG: 21 20 38 39 2E 39 20 90 PKG: 10 D 10 1D E 10 45 75 FIRST Length=-6 PKG: 21 72 6F 70 61 20 20 90 PKG: 10 D 10 1D D 10 44 4F FIRST Length=-6 PKG: 21 50 4F 2A 48 4F 45 80 PKG: 10 D 10 1D C 10 44 46 FIRST Length=-6 PKG: 21 4D 44 41 4E 43 45 90 PKG: 10 D 10 1D B 10 20 44 FIRST Length=-6 PKG: 21 41 43 48 41 20 20 90 PKG: 10 D 10 1D A 10 20 43 FIRST Length=-6 PKG: 21 4F 4D 45 44 59 20 90 PKG: 10 D 10 1D 9 10 42 45 FIRST Length=-6 PKG: 21 53 54 20 46 4D 20 90 PKG: 10 D 10 1D 8 10 42 45 FIRST Length=-6 PKG: 21 43 48 41 20 46 4D 90 PKG: 10 D 10 1D 7 10 61 6E FIRST Length=-6 PKG: 21 73 6F 6E 2E 66 6D 80 PKG: 10 D 10 1D 6 10 39 38 FIRST Length=-6 PKG: 21 2E 38 20 46 4D 20 90 PKG: 10 D 10 1D 5 10 20 39 FIRST Length=-6 PKG: 21 38 2E 34 20 46 4D 90 PKG: 10 D 10 1D 4 10 20 39 FIRST Length=-6 PKG: 21 36 2C 38 20 46 4D 90 PKG: 10 D 10 1D 3 10 39 30 FIRST Length=-6 PKG: 21 2E 33 20 46 4D 20 B0 PKG: 10 D 10 1D 2 10 38 38 FIRST Length=-6 PKG: 21 2E 37 20 46 4D 20 B0 PKG: 10 D 10 1D 1 10 20 20 FIRST Length=-6 PKG: 21 38 38 2E 33 20 20 90 PKG: 10 D 10 1D 0 10 31 30 FIRST Length=-6 PKG: 21 37 2E 38 20 46 4D 80 Грабли точно в строке LengthP = (buf[0] & 0x0F * 256 + buf[1]) - (len - 2); Может её нужно как-то по другому записать или скобок где наставить? Короче сам разобрался скобок не хватало LengthP = ((buf[0] & 0x0F) * 256 + buf[1]) - (len - 2); вот так всё красиво! От тестировал - пакет собирается. Но у меня почему-то по одному пакету данных всегда... Возможно из за дисплея. И по сути в этом пакете ни чего важного больше и нет. Можно просто строку эту вытащить и всё. Последний раз редактировалось T_r_D; 04.02.2016 в 23:44. |
Здесь присутствуют: 13 (пользователей: 0 , гостей: 13) | |
|
|