【发布时间】:2020-02-20 03:28:00
【问题描述】:
我正在将我的应用程序从 java 重建为颤振。我正在使用 firebase 将颜色存储为整数值。在 java 中,我可以使用以下方法将 rgb 值转换为整数值:
colorInt = (255 << 24) | (color.red << 16) | (color.green << 8) | color.blue;
我可以使用以下方法将整数值转换为 rgb:
int r = (colorInt >> 16) & 0xFF;
int g = (colorInt >> 8) & 0xFF;
int b = colorInt & 0xFF;
如何将 Java 整数颜色转换为颤振颜色并返回?
以 RGB 154、255、147 为例
在颤振中,结果是 4288348051
(255 << 24) | (154 << 16) | (255 << 8) | 147;
(4278190080) | (10092544) | (65280) | 147;
(4278190080) | (10092544) = 4288282624;
(4278190080) | (10092544) | (65280) = 4288347904;
(4278190080) | (10092544) | (65280) | 147 = 4288348051
在 java 中这将是 -6619245
(255 << 24) | (154 << 16) | (255 << 8) | 147;
(-16777216) | (10092544) | (65280) | 147;
(-16777216) | (10092544) = -6684672;
(-16777216) | (10092544) | (65280) = -6619392;
(-16777216) | (10092544) | (65280) | 147 = -6619245;
【问题讨论】:
-
按位
or和and和班次仍然存在 - api.flutter.dev/flutter/dart-core/int-class.html#operators -
你有例子吗?
print('${2 | 1}')向我展示了 3,正如预期的那样 -
@cricket_007查看我的编辑
-
Dart 使用 64 位整数,因此如果您将 Java 代码更改为使用
long而不是int,您将得到相同(正)的结果。您在 Java 中得到一个负数,因为您将一个 32 位 int 与最高位设置到一个 int 中,这些 int 是用 Java 签名的。当然,它们都是相同的位模式,只是根据容器是否签名而打印不同。 -
这不是一个选项。这需要我的所有用户重新输入他们的数据。