12

我有一个类型的变量,sbyte想将内容复制到byte. 转换不会是值转换,而是逐位复制。

例如,

如果 mySbyte in bits 为:'10101100',则转换后,相应的字节变量也将包含位'10101100'。

4

4 回答 4

21

让我澄清一下unchecked业务。MSDN 页面声明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。

于 2013-03-15T13:33:39.827 回答
5
unchecked
{
    sbyte s = (sbyte)250; //-6 (11111010) 
    byte b = (byte)s; //again 250 (11111010) 
}
于 2012-06-25T12:10:21.143 回答
5
unchecked
{
    sbyte s;
    s= (sbyte)"your value";
    byte b=(byte)s;
}

更多关于unchecked这里

于 2012-06-25T12:26:38.273 回答
4

像这样:

sbyte sb = 0xFF;
byte b = unchecked((byte)sb);
于 2012-06-25T12:09:53.843 回答