2017-02-28 5 views
0

16進数で色の値をsmali色に変換する方法たとえば、#ff212121(16進数) - >-0xdededf(smali)です。 #df3192b8 - >-0x20ce6d48などHEX色をsmali色に変換するにはどうすればいいですか?

+1

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

+0

私は思ったよりも簡単でした。 Googleで検索するときにこのリンクが見つかりませんでした。ありがとうございました! –

+0

そのリンクは正しくありません。元の色とは別の色で終わります。 – JesusFreke

答えて

1

何かを変換する必要はありません。 16進コードが#df3192b8の場合は、0xdf3192b8を使用できます。 smaliで

32ビット整数定数は-2^312^32-12^31-1ない)の間の値で指定することができます。基本的には、符号付き32ビット値と符号なし32ビット値の組み合わせです。もちろん

、あなたが2^31の範囲で値を指定すると、Javaのみ署名している整数以来、 - 2^32 - 1、それは負の数として仮想マシンによって解釈され、これが分解するときbaksmaliが使用するデフォルトの表現でありますクラス。このため、逆アセンブリで0xdf3192b8ではなく-0x20ce6d48のような値が表示されます。しかし、両方の値は同じバイトコードを生成し、同じ色を指定します。

"変換する"ために、値が正の場合、何もする必要はありません。値が負の場合は、単に0x100000000を値に追加します。例えば-0x20ce6d48 + 0x100000000 = 0xdf3192b8であるので、-0x20ce6d48の値は、#df3192b8の16進数のコードに対応します。

-1
  1. はあなたの新しい進数の前に「F」
  2. 前アペンド-0xから自分の色にすべての桁の16進数の減算を行います。
+0

16進数のカラーコードを符号付きの表現に変換する必要はありません。詳細は私の答えを見てください。 – JesusFreke

+0

また、説明するのは補数ですが、符号付き整数は2の補数表現を使用するため、変換は1つだけオフになります。 – JesusFreke

関連する問題