2017-02-28 122 views
0

如何将HEX的颜色值转换为smali颜色(和背面)?例如:#ff212121(十六进制) - >-0xdededf(小数)。 #df3192b8 - >-0x20ce6d48如何将HEX颜色转换为smali颜色(Java)?

+1

http://touchwizreborn.blogspot.com/2016/02/how-to-convert-hex-color-code-to-smali.html – assylias

+0

这比我想象的要容易。奇怪的是,我在Google中搜索时未找到此链接。谢谢! –

+0

该链接不正确。最终你会得到一个与原始颜色相同的颜色。 – JesusFreke

回答

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. 在新的十六进制数的前面做的所有数字的十六进制减法的颜色从“F”
  2. 前追加-0x。
+0

不需要将十六进制颜色代码转换为其有符号表示形式。查看我的答案了解更多详情。 – JesusFreke

+0

另外,你描述的是补码,但有符号整数使用二进制补码表示,所以你的转换是关闭的。 – JesusFreke