如何将HEX中的颜色值转换为smali颜色(和返回)?例如:#ff212121
(hex) - > -0xdededf
(smali)。 #df3192b8
- > -0x20ce6d48
等。
答案 0 :(得分:1)
没有必要转换任何东西。如果您的十六进制代码为#df3192b8
,则可以使用0xdf3192b8
。
smali中的32位整数常量可以指定为-2^31
和2^32-1
之间的值(不是2^31-1
)。基本上,它是可能的有符号和无符号32位值的组合。
当然,由于java只有有符号整数,当你指定2^31
- 2^32 - 1
范围内的值时,它会被虚拟机解释为负数,这就是baksmali在反汇编时使用的默认表示法。这就是您在反汇编中看到-0x20ce6d48
而不是0xdf3192b8
等值的原因。但是这两个值都生成相同的字节码/指定相同的颜色。
为了“转换回”,如果值为正,那么就没有必要做任何事情了。如果值为负数,只需将0x100000000
添加到值即可。例如-0x20ce6d48 + 0x100000000 = 0xdf3192b8
,因此值-0x20ce6d48
对应于#df3192b8
的十六进制颜色代码。
答案 1 :(得分:-1)