我想使用十六进制数为int赋值:
int i = 0xFFFFFFFF; // effectively, set i to -1
Run Code Online (Sandbox Code Playgroud)
可以理解,编译器抱怨.问题,我如何进行上述工作?
这就是我需要这个的原因.
WritableBitmapclass将像素数组公开为int [].所以,如果我想将像素设置为蓝色,我会说:0xFF0000FF(ARGB)( - 16776961)
如果有一个优雅的编译时解决方案,我很好奇.
我知道有一个:
int i = BitConverter.ToInt32(new byte[] { 0xFF, 0x00, 0x00, 0xFF }, 0);
Run Code Online (Sandbox Code Playgroud)
但它既不优雅,也不编译时间.
Eri*_*ert 88
给某人一条鱼,你喂他们一天.教他们注意编译器错误消息,他们不必在互联网上提出错误消息回答的问题.
int i = 0xFFFFFFFF;
Run Code Online (Sandbox Code Playgroud)
生产:
Cannot implicitly convert type 'uint' to 'int'. An explicit conversion exists
(are you missing a cast?)
Run Code Online (Sandbox Code Playgroud)
注意错误消息并尝试添加强制转换:
int i = (int)0xFFFFFFFF;
Run Code Online (Sandbox Code Playgroud)
现在的错误是:
Constant value '4294967295' cannot be converted to a 'int'
(use 'unchecked' syntax to override)
Run Code Online (Sandbox Code Playgroud)
再次,请注意错误消息.使用未经检查的语法.
int i = unchecked((int)0xFFFFFFFF);
Run Code Online (Sandbox Code Playgroud)
要么
unchecked
{
int i = (int)0xFFFFFFFF;
}
Run Code Online (Sandbox Code Playgroud)
现在,没有错误.
作为使用未经检查的语法的替代方法,您可以/checked-在编译器开关上指定,如果您希望危险地生活.
奖金问题:
什么使文字成为
uint首位?
整数文字的类型不取决于它是十六进制还是十进制.而是:
U或L后缀,那么它是uint,long或者ulong,取决于您选择的后缀的组合.int,uint,long或ulong.在该列表中首先匹配的是表达式的类型.在这种情况下,十六进制文字的值超出范围int但在范围内uint,因此将其视为a uint.
Pau*_*ter 14
你只需要一个未经检查的演员:
unchecked
{
int i = (int)0xFFFFFFFF;
Console.WriteLine("here it is: {0}", i);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14825 次 |
| 最近记录: |