1

我真的很困惑,将TextView.setTextColor(int)0xFFFFFFFF 作为输入值是完全可以的,但对于 4294967295 的十进制等值则不行

现在,我完全理解为什么第二个值完全超出了 int 的范围。我的问题是为什么十六进制值没有超出范围!

我问的原因是我有一种情况,我从一个文本文件中读取十六进制值,我需要在运行时使用它来设置应用程序中各种文本字段的颜色。

我在尝试 Java 中的各种字符串到 int 方法时遇到了困难(Long.parseLong等),但他们都没有做到这一点。

将字符串十六进制值转换为 setTextColor 会满意并正确解释的正确方法是什么?

4

2 回答 2

1

对于不同形式的整数文字,JLS 中的不同规则是一个问题

“如果 int 类型的十进制文字大于 2147483648 (231),或者如果十进制文字 2147483648 出现在除一元减运算符的操作数之外的任何位置 (§15.15.4),则这是编译时错误。”

“如果十六进制、八进制或二进制 int 文字不适合 32 位,则会出现编译时错误。”

十六进制、八进制或二进制文字可以是负数的 2 的补码表示。

于 2013-01-14T08:05:17.127 回答
0

也许Color上课会有所帮助:

颜色表示为压缩整数,由 4 个字节组成:alpha、red、green、blue。这些值是未预乘的,这意味着任何透明度都仅存储在 alpha 组件中,而不是存储在颜色组件中。组件存储如下 (alpha << 24) | (红色 << 16) | (绿色 << 8) | 蓝色的。每个组件的范围在 0..255 之间,0 表示对该组件没有贡献,255 表示 100% 的贡献。因此不透明黑色将为 0xFF000000(100% 不透明,但没有来自红色、绿色或蓝色的贡献),不透明白色将为 0xFFFFFFFF

于 2013-01-14T07:59:57.300 回答