我正在从串口读取字节,但我需要将它们转换为有符号的8位整数(SByte)。不幸的是,在Visual Basic中,溢出检查会防止Byte值255变成SByte中的-1。因此,本质上,我想要做以下事情:
uint8_t a = 255;
int8_t b = (int8_t)a; // b == -1
如何在Visual Basic中实现这个功能?
我正在从串口读取字节,但我需要将它们转换为有符号的8位整数(SByte)。不幸的是,在Visual Basic中,溢出检查会防止Byte值255变成SByte中的-1。因此,本质上,我想要做以下事情:
uint8_t a = 255;
int8_t b = (int8_t)a; // b == -1
我可以使用Visual Basic手动完成这个操作,方法如下:IIf。
Dim a as Byte = 255
Dim b as SByte = IIf(a < 128, a, a - 256)
VB看起来不是处理位操作的最佳选择。也许你可以使用C#来创建一个单独的程序集,这样你就可以轻松地进行以下操作:
byte b = 255;
sbyte sb = (sbyte) b;
(C#默认情况下运行时操作是未经检查的)
或者,您可以在VB项目级别关闭溢出检查。
项目属性 -> 编译 -> 高级编译器选项 -> [X] 删除整数溢出检查
现在,您只需要进行强制转换!无需算术运算!
Dim b As Byte = 255
Dim sb As SByte = CSByte(b)