2012-06-25 123 views
10

我有一個類型爲sbyte的變量,並且想要將內容複製到byte。轉換不會是值轉換,而是每位複製一點點。將sbyte轉換爲字節

例如,

如果mySbyte在比特是:「10101100」,轉換後,對應的字節變量還包含比特「10101100」。

+2

爲什麼不把它轉換爲'byte'? – V4Vendetta

+0

@ V4Vendetta:它會起作用嗎,如果價值超出範圍,在sbyte上是負數,我會在某處讀取,會拋出異常。 –

+0

嗯,不是真的說它-1,那麼你會得到它作爲255 – V4Vendetta

回答

4
unchecked 
{ 
    sbyte s; 
    s= (sbyte)"your value"; 
    byte b=(byte)s; 
} 

更多uncheckedhere

4

這樣的:

sbyte sb = 0xFF; 
byte b = unchecked((byte)sb); 
3
unchecked 
{ 
    sbyte s = (sbyte)250; //-6 (11111010) 
    byte b = (byte)s; //again 250 (11111010) 
} 
+0

增加了澄清,這裏使用的未檢查的含義是什麼? –

+4

由於250超過了sbyte(-128 - 127)的範圍,因此需要進行未經檢查的轉換。 –

15

讓我澄清unchecked業務。 MSDN page指出unchecked用於防止溢出檢查,否則,如果在檢查的上下文內部出現,則會發出編譯錯誤或拋出異常。

... IF在檢查的上下文內。

上下文檢查明示:

checked { ... } 

或隱*,當處理編譯時常

byte b = (byte)-6; //compile error 
byte b2 = (byte)(200 + 200); //compile error 

int i = int.MaxValue + 10; //compiler error 

但隨着運行時處理變量時,上下文是unchecked默認**:

sbyte sb = -6; 
byte b = (byte)sb; //no problem, sb is a variable 


int i = int.MaxValue; 
int j = i + 10; //no problem, i is a variable 

總結和回答原來的問題:

需要byte<->sbyte轉換上常數?使用unchecked和投:

byte b = unchecked((byte) -6); 

需要byte<->sbyte轉換上變量?只投:

sbyte sb = -6; 
byte b = (byte) sb; 

*還有第三個辦法讓默認選中的情況下:通過調整編譯器設置。例如。 Visual Studio中 - >項目屬性 - >建設 - >高級 - > [X]檢查算術溢出/下溢

**的運行時環境是默認在C#選中。例如在VB.NET中,默認的運行時環境是CHECKED。