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

How to convert HEX color to smali color (in Java)?

如何将 HEX 颜色值转换为 smali 颜色(并返回)?例如:#ff212121(十六进制)-> -0xdededf(smali)。 #df3192b8 -> -0x20ce6d48

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

不需要转换任何东西。如果你的十六进制代码是 #df3192b8,那么你可以使用 0xdf3192b8.

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

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

为了"convert back",如果值为正数,则不需要做任何事情。如果该值为负数,只需将 0x100000000 添加到该值即可。例如-0x20ce6d48 + 0x100000000 = 0xdf3192b8,因此 -0x20ce6d48 的值对应于 #df3192b8 的十六进制颜色代码。