- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想用十六进制数给一个整数赋值:
int i = 0xFFFFFFFF; // effectively, set i to -1
可以理解,编译器会提示。问题,我如何使上述工作?
这就是我需要它的原因。WritableBitmap
类将像素数组公开为 int[]。所以如果我想将像素设置为蓝色,我会说:0xFF0000FF (ARGB) (-16776961)
另外,我很好奇是否有优雅的编译时解决方案。
我知道有一个:
int i = BitConverter.ToInt32(new byte[] { 0xFF, 0x00, 0x00, 0xFF }, 0);
但它既不优雅,也不是编译时间。
最佳答案
给某人一条鱼,你可以喂他们一天。 教他们注意编译器错误消息,他们不必在互联网上提问错误消息会回答的问题。
int i = 0xFFFFFFFF;
产生:
Cannot implicitly convert type 'uint' to 'int'. An explicit conversion exists
(are you missing a cast?)
注意错误信息并尝试添加类型转换:
int i = (int)0xFFFFFFFF;
现在错误是:
Constant value '4294967295' cannot be converted to a 'int'
(use 'unchecked' syntax to override)
再次注意错误信息。 使用未经检查的语法。
int i = unchecked((int)0xFFFFFFFF);
或者
unchecked
{
int i = (int)0xFFFFFFFF;
}
现在,没有错误了。
作为使用未检查语法的替代方法,如果您喜欢冒险,可以在编译器开关上指定 /checked-
。
奖励问题:
What makes the literal a
uint
in the first place?
整数文字的类型不取决于它是十六进制还是十进制。相反:
U
或 L
后缀,则它是 uint
、long
或 ulong
,取决于您选择的后缀组合。int
、uint
、long 的范围
或 ulong
。该列表中第一个匹配的就是表达式的类型。在这种情况下,十六进制文字的值在 int
范围之外但在 uint
范围内,因此它被视为 uint
。
关于C#:将 0xFFFFFFFF 分配给 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6797409/
我在将 Windows Apache 连接到 SQL Server Express 2008 时遇到问题 PHP 版本 5.2.9 Apache 版本 Apache/2.2.11 (Win32) "d
我在将 Windows Apache 连接到 SQL Server Express 2008 时遇到问题 PHP 版本 5.2.9 Apache 版本 Apache/2.2.11 (Win32) "d
我是一名优秀的程序员,十分优秀!