2012-02-24 188 views
3

我正在從串口讀取字節,但我需要將它們轉換爲有符號的8位整數(SByte)。不幸的是,Visual Basic中的溢出檢查阻止了字節值255在SByte中變爲-1。因此,從本質上講,我要做到以下幾點:將字節轉換爲SByte

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

我怎樣才能做到這一點在Visual Basic?

+1

uint將無符號的權利?所以如果a = -1 b將被googlegunk – 2012-02-24 16:48:15

+0

@PaulNikonowicz:上面的C代碼將簡單地把字節,因爲它們存儲在a中,並將它們放置在b中。由於a = 255(0b11111111),那麼b也將是0b11111111,因此將被解釋爲-1,假定編譯器使用2的補碼錶示來存儲有符號整數。 – 2012-02-24 16:53:57

+0

無論你如何設想,只要你嘗試應用算術或打印b,你會得到一些意想不到的東西。也就是說,除非您真的試圖爲「國際混淆C代碼競賽」做出貢獻。 – 2012-02-24 16:57:56

回答

2

我可以手動使用Visual Basic中IIf如下做到這一點:

Dim a as Byte = 255 
Dim b as SByte = IIf(a < 128, a, a - 256) 
0

VB似乎並不像扯皮位的最佳選擇。也許你可以在C#中一個單獨的程序這一點,在那裏你可以只是做:

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

(運行時操作默認情況下,在C#中取消選中)

或者,你可以關閉溢出的檢查VB項目級別。

項目屬性 - >編譯期>高級選項 - 編譯> [X]移除整數溢出檢查

而現在,你只需要投!沒有算術!

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