我有一个类型的变量,sbyte
想将内容复制到byte
. 转换不会是值转换,而是逐位复制。
例如,
如果 mySbyte in bits 为:'10101100',则转换后,相应的字节变量也将包含位'10101100'。
让我澄清一下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。
unchecked
{
sbyte s = (sbyte)250; //-6 (11111010)
byte b = (byte)s; //again 250 (11111010)
}
unchecked
{
sbyte s;
s= (sbyte)"your value";
byte b=(byte)s;
}
更多关于unchecked
这里
像这样:
sbyte sb = 0xFF;
byte b = unchecked((byte)sb);