gpt4 book ai didi

C#:将 0xFFFFFFFF 分配给 int

转载 作者:IT王子 更新时间:2023-10-29 04:45:15 26 4
gpt4 key购买 nike

我想用十六进制数给一个整数赋值:

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?

整数文字的类型取决于它是十六进制还是十进制。相反:

  • 如果十进制字面量有 UL 后缀,则它是 uintlongulong,取决于您选择的后缀组合。
  • 如果它没有后缀,那么我们取文字的值,看看它是否适合 intuintlong 的范围ulong。该列表中第一个匹配的就是表达式的类型。

在这种情况下,十六进制文字的值在 int 范围之外但在 uint 范围内,因此它被视为 uint

关于C#:将 0xFFFFFFFF 分配给 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6797409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com