8个十六进制数字超出Kotlin Int的范围,但适用于java Int
我正在开发一款Android应用程序,它可以获得一种颜色(32位数字),我想用一款Android8个十六进制数字超出Kotlin Int的范围,但适用于java Int,java,android,kotlin,unsigned-integer,Java,Android,Kotlin,Unsigned Integer,我正在开发一款Android应用程序,它可以获得一种颜色(32位数字),我想用一款Android可绘制的来展示它 我还想确保没有透明度,所以我用一个设置了最高有效位的掩码来设置它 我的应用程序是用Kotlin编写的,所以这个数字属于Int类型 在Java中,我认为以下方法可行 int colorInt = myColor || 0xFF000000; 我和Kotlin试过以下方法 var colorInt:Int = myColor or 0xFF000000 // Error - Integ
可绘制的来展示它
我还想确保没有透明度,所以我用一个设置了最高有效位的掩码来设置它
我的应用程序是用Kotlin编写的,所以这个数字属于Int
类型
在Java中,我认为以下方法可行
int colorInt = myColor || 0xFF000000;
我和Kotlin试过以下方法
var colorInt:Int = myColor or 0xFF000000 // Error - Integer literal does not conform to the expected type of Int
这表明0xFF000000
超出了Int
我可以使用UInt
,但是Drawable
类和许多其他SDK方法接受Int
作为颜色,如果我通过UInt
,就会抱怨类型。
例如,如果我想在GradientDrawable
中使用两种颜色,则构造函数接受IntArray
,而不会使用UIntArray
。(据我所知,未签名类型在Kotlin中是实验性的,因此我不希望在更新Kotlin版本后再“修复”这些类型。)
我可以在Kotlin中使用-0xFFFFFF
,这在本例中似乎很好,尽管可以说我所做的事情不如java版本那么明显
我想了解处理这种情况的最佳方法,以及java和kotlin中存在这种差异的原因。因为kotlin 1.3可以在Int
有符号时使用(因此十六进制0xFF000000
超出范围)。现在您可以尝试:
// UInt instead of Int
// u suffix at the end of number
val m:UInt = 0xFF000000u
由于Kotlin 1.3可以使用asInt
进行签名(因此十六进制0xFF000000
超出范围)。现在您可以尝试:
// UInt instead of Int
// u suffix at the end of number
val m:UInt = 0xFF000000u
不能使用UInt,然后使用toInt()函数将UInt转换为普通Int???哇。。是的。谢谢你不能使用UInt,然后是toInt()函数将UInt转换为普通Int???哇。。是的。谢谢,我不能使用UInt
,因为SDK方法需要Int。我使用了0xFF000000.toInt()
作为相关问题。谢谢。我不能使用UInt
,因为SDK方法需要Int。我使用了0xFF000000.toInt()
作为相关问题。谢谢你。