|
|
|
Расшифровка 3байтного результата
|
|||
|---|---|---|---|
|
#18+
С одного девайса в комп ползут данные измерения в 3х байтном формате со знаком. Как 24битное значение со знаком затолкать в 32битное со знаком? Юзаю delphi. Пусть в переменных а1,а2,а3 содержаться старший, средний и младший байты. a1 shl 16 + a2 shl 8 + a3 чето не работает((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2011, 09:20 |
|
||
|
Расшифровка 3байтного результата
|
|||
|---|---|---|---|
|
#18+
Тещща, "Не работает" - это компьютер вместе с отладчиком устраивают истерику "Не буду работать, не буду, не буду!" - или всё-таки в переменной оказывается неправильное значение? Наугад: сами a1, a2, a3 часом не байтовые переменные? А если да, то часом не получается ли так, что сдвиги их попросту обнуляют? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2011, 09:39 |
|
||
|
Расшифровка 3байтного результата
|
|||
|---|---|---|---|
|
#18+
Тещща, Вы сами-то поняли, что делаете? - a1 shl 16 + a2 shl 8 + a3 даст вам само число a 1 a 2 a 3 . Если знак - это старший бит числа, то вам же надо сдвинуть восьмой бит a 1 до шестнадцатого бита, а остальные семь - оставить на месте; при этом a 2 a 3 вообще остается без изменений. Пусть a1,a2,a3 - старший, средний, младший байты (пусть именно byte). Результат получаем типа так: (a1 div 2^7 * 2^15 + a1 mod 2^7) * 2^16 + a2 * 2^8 + a3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2011, 14:39 |
|
||
|
|

start [/forum/topic.php?fid=16&gotonew=1&tid=1342691]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
204ms |
get topic data: |
10ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 540ms |

| 0 / 0 |
