如何将HEX颜色转换为smali颜色(在Java中)?

时间:2017-02-28 19:00:31

标签: java android colors hex smali

如何将HEX中的颜色值转换为smali颜色(和返回)?例如:#ff212121(hex) - > -0xdededf(smali)。 #df3192b8 - > -0x20ce6d48等。

2 个答案:

答案 0 :(得分:1)

没有必要转换任何东西。如果您的十六进制代码为#df3192b8,则可以使用0xdf3192b8

smali中的32位整数常量可以指定为-2^312^32-1之间的值(不是2^31-1)。基本上,它是可能的有符号和无符号32位值的组合。

当然,由于java只有有符号整数,当你指定2^31 - 2^32 - 1范围内的值时,它会被虚拟机解释为负数,这就是baksmali在反汇编时使用的默认表示法。这就是您在反汇编中看到-0x20ce6d48而不是0xdf3192b8等值的原因。但是这两个值都生成相同的字节码/指定相同的颜色。

为了“转换回”,如果值为正,那么就没有必要做任何事情了。如果值为负数,只需将0x100000000添加到值即可。例如-0x20ce6d48 + 0x100000000 = 0xdf3192b8,因此值-0x20ce6d48对应于#df3192b8的十六进制颜色代码。

答案 1 :(得分:-1)

  1. 从' f'
  2. 对您的颜色中的所有数字进行十六进制减法
  3. 在新的十六进制数字前预先附加-0x。