我有一個類型爲sbyte
的變量,並且想要將內容複製到byte
。轉換不會是值轉換,而是每位複製一點點。將sbyte轉換爲字節
例如,
如果mySbyte在比特是:「10101100」,轉換後,對應的字節變量還包含比特「10101100」。
我有一個類型爲sbyte
的變量,並且想要將內容複製到byte
。轉換不會是值轉換,而是每位複製一點點。將sbyte轉換爲字節
例如,
如果mySbyte在比特是:「10101100」,轉換後,對應的字節變量還包含比特「10101100」。
unchecked
{
sbyte s;
s= (sbyte)"your value";
byte b=(byte)s;
}
更多unchecked
是here
這樣的:
sbyte sb = 0xFF;
byte b = unchecked((byte)sb);
unchecked
{
sbyte s = (sbyte)250; //-6 (11111010)
byte b = (byte)s; //again 250 (11111010)
}
增加了澄清,這裏使用的未檢查的含義是什麼? –
由於250超過了sbyte(-128 - 127)的範圍,因此需要進行未經檢查的轉換。 –
讓我澄清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。
爲什麼不把它轉換爲'byte'? – V4Vendetta
@ V4Vendetta:它會起作用嗎,如果價值超出範圍,在sbyte上是負數,我會在某處讀取,會拋出異常。 –
嗯,不是真的說它-1,那麼你會得到它作爲255 – V4Vendetta