roboforum.ru

Технический форум по робототехнике.

Помогите с VB

Помогите с VB

-= Александр =- » 17 авг 2009, 22:28

Уже час бьюсь над проблемой: в прогу на Вижал Бейсике снизу приходят данные. Там внизу на Си это int, при том знаковый. А наверху - два байта. Как их склеить в инт? С положительными все в порядке, но когда приходит отрицательное - что делать? Оно ж в дополнительном коде... Есть какой простой способ? Или только мониторить на предмет знакового бита и писать гору условий?

На си можно просто сдвигом и сложением по маске решить вопрос... :)

Re: Помогите с VB

MiBBiM » 17 авг 2009, 23:01

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

Re: Помогите с VB

-= Александр =- » 17 авг 2009, 23:11

Че-то у меня мозг клинит... Получил байт 208... Not 208 = -209 - бред какой-то... Должно быть 47!

Re: Помогите с VB

=DeaD= » 17 авг 2009, 23:19

2Александр: А можно с примерами - какие байты во что должны превращаться? Может там функция то в 2 операции? :)

Добавлено спустя 2 минуты 59 секунд:
Мне кажется что вообще пусть в "x" у нас лежит полученное число.

К правильному виду оно приводится функцией if(x>n;x-m;x), где n - максимальное положительное представимое в нужном нам виде, а m - максимальное значение x, плюс единица.

Re: Помогите с VB

-= Александр =- » 17 авг 2009, 23:42

Вообще идет число вида 0xABCD - его делим на AB и CD, которые передаем через ком-порт. Задача: получить обратно 0xABCD на компе имея AB и CD средствами Вижал Бейсика. Кстати там они сложены в строку...

x = Asc(Mid$(buffer, 1, 1))
x = x + Asc(Mid$(buffer, 2, 1)) * 256

Это нормально работает с положительными, но для отрицательных он в упор не хочет работать. На Си я мог легко делать со знаковым битом все что угодно, как и с любым другим. А тут видимо не пускает. Да и битовые операции работают как-то не так. Not например вместо инверсии переводит в отрицательное. :shock:

Re: Помогите с VB

=DeaD= » 17 авг 2009, 23:47

Дык это поди не побитовое, а логическое NOT :)

Re: Помогите с VB

MiBBiM » 17 авг 2009, 23:53

дык при инверсии знаковый бит изменяется
Последний раз редактировалось MiBBiM 18 авг 2009, 07:24, всего редактировалось 1 раз.

Re: Помогите с VB

blindman » 18 авг 2009, 05:44

Код: Выделить всёРазвернуть
x = Asc(Mid$(buffer, 1, 1))
x = x + Asc(Mid$(buffer, 2, 1)) * 256
If x > 32767 Then x = x - 65536

Re: Помогите с VB

-= Александр =- » 18 авг 2009, 20:06

Заработало! Всем пасибо. Забыл что integer в VB это 4 байта, а не 2, как внизу... :oops:


cron
Rambler\'s Top100 Mail.ru counter