3 回答

TA貢獻1864條經驗 獲得超6個贊
Java 使用有符號的 32 位整數。擴展他們發布的代碼塊,我們可以創建一個完整的示例,它可以滿足我們的需要:
import 'dart:math';
int chopToJavaInt (int result) {
? while (result > pow(2, 31)) {
? ? result = result - pow(2, 32);
? }
? return result;
}
int javaIntColor(int r, int g, int b) {
? var x = (g << 24) | (r << 16) | (g << 8) | b;
? return chopToJavaInt(x);
}
void main () {
? print(javaIntColor(154, 255, 147)); //-6619245
}
該解決方案是模塊化的,保留了 Java 代碼的原始風格,并將返回正確的值。

TA貢獻2041條經驗 獲得超4個贊
Java 使用有符號 32 位 int,因此值介于 -2^31 和 2^31 之間。一旦達到 2^31,它們就會從 -1 繼續到 -2^31。
嘗試將此應用于您在 Flutter 中獲得的結果:
if (result > pow(2, 31)) { result = result - pow(2, 32); }

TA貢獻1786條經驗 獲得超13個贊
也許用 1 填充高位數字?
int rgb = -6619245;
final c = Color(rgb);
print('${c.red} ${c.green} ${c.blue}');
int fromColorRgb = c.value | 0xFFFFFFFF00000000;
print('$rgb : $fromColorRgb');
結果:
I/flutter (10689): 154 255 147
I/flutter (10689): -6619245 : -6619245
假設您的 Alpha 通道始終為 255
添加回答
舉報