roboforum.ru

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

Помогите с VB

Вопросы не попавшие в другие категории.

Помогите с VB

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

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

На си можно просто сдвигом и сложением по маске решить вопрос... :)
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

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

Сообщение MiBBiM » 17 авг 2009, 23:01

сдвиг можно делением сделать, а логический операции вот
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

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

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

Че-то у меня мозг клинит... Получил байт 208... Not 208 = -209 - бред какой-то... Должно быть 47!
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

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

Сообщение =DeaD= » 17 авг 2009, 23:19

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

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

К правильному виду оно приводится функцией if(x>n;x-m;x), где n - максимальное положительное представимое в нужном нам виде, а m - максимальное значение x, плюс единица.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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:
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

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

Сообщение =DeaD= » 17 авг 2009, 23:47

Дык это поди не побитовое, а логическое NOT :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение MiBBiM » 17 авг 2009, 23:53

дык при инверсии знаковый бит изменяется
Последний раз редактировалось MiBBiM 18 авг 2009, 07:24, всего редактировалось 1 раз.
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

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
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

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

Заработало! Всем пасибо. Забыл что integer в VB это 4 байта, а не 2, как внизу... :oops:
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич


Вернуться в Обо всём

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5