将sbyte转换为byte

时间:2012-06-25 12:03:17

标签: c# byte bits

我有一个sbyte类型的变量,并希望将内容复制到byte。转换不是值转换,而是每位复制。

例如,

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

4 个答案:

答案 0 :(得分:17)

让我澄清一下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 - &gt;项目属性 - &gt;构建 - &gt;高级... - &gt; [X]检查算术上溢/下溢

**默认情况下,未选中运行时上下文 中的 。例如,在VB.NET中,默认运行时上下文是CHECKED。

答案 1 :(得分:4)

像这样:

sbyte sb = 0xFF;
byte b = unchecked((byte)sb);

答案 2 :(得分:4)

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

有关unchecked的更多信息,请here

答案 3 :(得分:3)

unchecked
{
    sbyte s = (sbyte)250; //-6 (11111010) 
    byte b = (byte)s; //again 250 (11111010) 
}