Преобразование байта в SByte - PullRequest
3 голосов
/ 24 февраля 2012

Я читаю байты с последовательного порта, но мне нужно преобразовать их в 8-разрядные целые числа со знаком (SByte) К сожалению, проверка переполнения в Visual Basic препятствует тому, чтобы значение байта 255 стало -1 в SByte. Итак, по сути, я хочу сделать следующее:

uint8_t a = 255;
int8_t b = (int8_t)a;    // b == -1

Как я могу сделать это в Visual Basic?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Я могу сделать это вручную в Visual Basic, используя IIf следующим образом:

Dim a as Byte = 255
Dim b as SByte = IIf(a < 128, a, a - 256)
1 голос
/ 15 марта 2013

VB не кажется лучшим вариантом для битов. Возможно, для этого у вас может быть отдельная сборка в C #, где вы можете просто сделать:

byte b = 255;
sbyte sb = (sbyte) b;

(во время выполнения операции по умолчанию не проверяются в C #)

Или вы могли бы отключить проверку переполнения на уровне проекта VB.

Свойства проекта-> Компиляция-> Параметр расширенного компилятора-> [X] Удаление целочисленных проверок переполнения

А теперь вам просто нужно сыграть! Нет арифметики!

Dim b As Byte = 255
Dim sb As SByte = CSByte(b)
...