我有一个sbyte
类型的变量,并希望将内容复制到byte
。转换不是值转换,而是每位复制。
例如,
如果mySbyte的位是:'10101100',转换后,相应的字节变量也将包含位'10101100'。
答案 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]检查算术上溢/下溢
**默认情况下,未选中运行时上下文
答案 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)
}