我正在從串口讀取字節,但我需要將它們轉換爲有符號的8位整數(SByte)。不幸的是,Visual Basic中的溢出檢查阻止了字節值255在SByte中變爲-1。因此,從本質上講,我要做到以下幾點:將字節轉換爲SByte
uint8_t a = 255;
int8_t b = (int8_t)a; // b == -1
我怎樣才能做到這一點在Visual Basic?
我正在從串口讀取字節,但我需要將它們轉換爲有符號的8位整數(SByte)。不幸的是,Visual Basic中的溢出檢查阻止了字節值255在SByte中變爲-1。因此,從本質上講,我要做到以下幾點:將字節轉換爲SByte
uint8_t a = 255;
int8_t b = (int8_t)a; // b == -1
我怎樣才能做到這一點在Visual Basic?
我可以手動使用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)
uint將無符號的權利?所以如果a = -1 b將被googlegunk – 2012-02-24 16:48:15
@PaulNikonowicz:上面的C代碼將簡單地把字節,因爲它們存儲在a中,並將它們放置在b中。由於a = 255(0b11111111),那麼b也將是0b11111111,因此將被解釋爲-1,假定編譯器使用2的補碼錶示來存儲有符號整數。 – 2012-02-24 16:53:57
無論你如何設想,只要你嘗試應用算術或打印b,你會得到一些意想不到的東西。也就是說,除非您真的試圖爲「國際混淆C代碼競賽」做出貢獻。 – 2012-02-24 16:57:56