26.08.2013, 18:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
"Выдрать" из 14 бит значение
Понаплодил я тем по одной задаче.. но все таки лучше разделять вопросы)
Итак, помогите красиво преобразовать два байта, в которых используются 14 бит, в правильное значение.
Это связано с одним хитрожопым протоколом, который так экономит байтики.
Итак, два значения. LS Length используется полностью - 8 бит. MS Length используется частично:
Я так понимаю, нужно при преобразовании просто обнулить эти два бита, которые мне не нужны и далее складывать из HI и LO как обычно?
Либо сдвинуть влево два раза MS Length с замещением нулями 0 и 1 бита?
|
|
|
|
26.08.2013, 18:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,983
Сказал спасибо: 0
Сказали Спасибо 4,941 раз(а) в 2,370 сообщении(ях)
|
Re: "Выдрать" из 14 бит значение
whoim,
а практикой гармонию поверить? ![Весело](images/smilies/icon_laugh.gif)
замаскировать (сложить с 03F) и дело в конце, т.е. далее объединяем в 16битное, два 8битных (ст.+мл.)
|
|
|
|
26.08.2013, 18:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: "Выдрать" из 14 бит значение
jump, я конечно неглупый парень, но неопытный в том что касается преобразований hex в привычный десятичный на лету, в голове)
Нет ли возможности обрисовать сей процесс чуть более явно, для таких как я? ![Улыбка](images/smilies/icon_smile.gif)
Благодарствую!
|
|
|
|
26.08.2013, 18:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: "Выдрать" из 14 бит значение
Ага, чуть включив мозг, пришел к выводу - что это первый из предположенных мною вариантов)
|
|
|
|
26.08.2013, 18:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: "Выдрать" из 14 бит значение
Если байты уже лежат в нужном порядке, то достаточно обнулить старшие два бита, если же они вразнобой, то да - складывать, но со сдвигом старшего на 8 бит.
__________________
There's always more than one way to skin a cat.
|
|
|
Сказали "Спасибо" tempora
|
|
|
26.08.2013, 18:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: "Выдрать" из 14 бит значение
tempora, лежат в буфере - сначала LS, потом этот, кастрированный.. То есть достаточно обнулить (предварительно сделав выводы по тем битам, они же зачем то нужны) и прочитать как uint16?
ясно!
пока тренируюсь на дельфях, чтобы расковырять протокол..
|
|
|
|
26.08.2013, 18:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: "Выдрать" из 14 бит значение
Сообщение от whoim
|
То есть достаточно обнулить (предварительно сделав выводы по тем битам, они же зачем то нужны) и прочитать как uint16? ясно!
|
Боюсь, не до конца Вам ясно. Если у проца старший байт - первый, то не прокатит, так как в буфере первый как раз-таки младший.
В общем, раз Вы скачете между процами, то лучше пишите как сумму двух независимых байт, чтобы избежать зависимости от порядка байт в процах.
__________________
There's always more than one way to skin a cat.
|
|
|
Сказали "Спасибо" tempora
|
|
|
26.08.2013, 19:17
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
Re: "Выдрать" из 14 бит значение
Сообщение от whoim
|
Нет ли возможности обрисовать сей процесс чуть более явно, для таких как я?
|
whoim, а обрисовать свой процесс чуть более явно можете. А то ЧиЧас нафигачим Вам процессов в коде ASM для I8086 - нет проблем. Когда же наконец научимся качественно оформлять темы. Начнем сначала:
1. Платформа.
2. Язык.
3. Предпочтительный компилятор (транслятор, IDE).
Вот тогда и будет предметный разговор - как это проще и красиво сделать, а пока голое словоблудие, очередная "лампочка через диод".
|
|
|
Сказали "Спасибо" Halex07
|
|
|
26.08.2013, 19:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: "Выдрать" из 14 бит значение
Halex07, оки
1. Платформа железки? Китайский проц от филипс, штоле.. не вникал.
Платформа, на которой веду написание кода? Core-i3, собсно.. пара гигагерц есть)
2. пока, для изучения процесса - Object Pascal
3. Delphi 7, каюсь, крякнутая. Вот-вот перееду на лазарус.
Между всем этим есть USB(CDC) ‹› UART китайский брелочек..
|
|
|
|
26.08.2013, 19:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
|
Re: "Выдрать" из 14 бит значение
Скорее всего: X = (MS & 0x3f) ‹‹ 8 + LS;
На паскале: X := (MS and $3f) * 256 + LS
Последний раз редактировалось Wiza_; 26.08.2013 в 20:07.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:36.
|
|