2017-02-28 119 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