2013-08-06 37 views
9

Bir int değerini bir hex değerine dönüştürmek zorundayım. Bu, örneğin int değerdir:android int hex dönüştürücü

int_value = -13516; 

onaltılık değere dönüştürmek için benim yaptığım:

hex_value = Integer.toHexString(int_value); 

Ben almalısınız değerdir: i yapmanız gerekip gerekmediğine -34CC (Bilmiyorum olumlu). ffff cb34

Bu dönüşüm yapmak için bu işlevi kullanılamaz:

şey, bu şekilde I get değeri dönüşümü yaptıktan olmasıdır?

+0

! Negatif olduğu için işaret biti ayarlanmış olan değerin onaltılık gösterimini sağladı. Android, negatif tamsayıları temsil etmek için iki bileşenini kullanır: Negatif bir değer, ayarlanan en soldaki bit ile temsil edilir ve pozitif değer, en soldaki bitin sıfırlanmasıyla temsil edilir. [İmzalı numaralar gösterimleri] 'ne bakınız (https://en.wikipedia.org/wiki/Signed_number_representations). Bunun iki yaşında olduğunu biliyorum, ancak altta yatan mekanizmaların sağlam bir kavrayışı programcıların sahip olması gereken değerli bir şeydir. :) –

+0

@LorneLaliberte Eğer bir C arkaplanınız varsa, bu hala beklenmedik bir durumdur, printf'in% X formatındaki belirleyicinin size beslediğiniz, imzaladığınız veya imzalamadığınız herhangi bir sayının işaretsiz onaltılık bir temsilini vermesi. Daha da kötüsü, Java * * işaretsiz tamsayı türüne sahip değil, bu yüzden onu bile düzeltemezsin! – Michael

+0

@Micheal bu durumda C ve Java arasında hiçbir fark yoktur, aslında java da imzasız bir değer döndürüyor.Bitler (ve böylece bu bitlerin onaltılık temsili) her iki şekilde de aynıdır. "İmzalı" ve "imzasız", bitlerin sadece farklı yorumlarıdır. '% X' belirtecinin her iki dilde de aynı şekilde çalıştığından, C'nin sprintf işlevinin belleğini yenilemek isteyebilirsiniz. –

cevap

18

Dokümantasyon Integer.toHexString döner imzasız bir değer olarak int onaltılık gösterimi diyor.

Integer.toString(value, 16)'un ne istediğinizi gerçekleştireceğine inanıyorum.

+0

Şimdilik denedim ve doğru yolu yapmak gibi görünüyor! – masmic

1

Git aracılığıyla tamsayı hex ve Hex Dönüşüm

itibaren
public class MainActivity extends Activity { 

int number; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    number = 678668; 
    Log.i("ACT", "Integer Number " + number); 

    /** 
    * Code for convert integer number to hex number. two mwthods. 
    */ 
    Log.i("ACT", String.format("#%x", number)); // use lower case x for 
               // lowercase hex 
    Log.i("ACT", "#" + Integer.toHexString(number)); 

    /** 
    * Code for convert hex number to integer number 
    */ 
    String hex = Integer.toHexString(number).replace("/^#/", ""); 
    int intValue = Integer.parseInt(hex, 16); 

    Log.i("ACT", "Integer Number " + intValue); 
    } 

} 
3
public static int convert(int n) { 
    return Integer.valueOf(String.valueOf(n), 16); 
} 
// in onstart: 
Log.v("TAG", convert(20) + ""); // 32 
Log.v("TAG", convert(54) + ""); // 84 

tamsayı için kod aşağıdadır: Java Convert integer to hex integer

+0

Ancak bu şekilde, hex'ten int'ye dönüşüm yapmıyor musunuz? İmzalı bir int'den bir hex'e başka bir şekilde yapmam gerekiyor. – masmic

+0

Haklısınız, bu başka bir yoldur. – VM4

2

İkisi String.format yanı sıra Integer.toHexString ("% x") işaretleri desteklemez. Yukarıdaki cevaplar size imzalı bit için kesin değer vermek sanmıyorum

int int_value = -13516; 
    String hex_value = int_value < 0 
         ? "-" + Integer.toHexString(-int_value) 
         : Integer.toHexString(int_value); 
1

: Sorunu çözmek için, bir üçlü ifade kullanabilirsiniz. Örneğin^11 değer 0B ama -11 değeri F5 olmak değil ben yukarıdaki cevabı

65536 2'dir,
int int_value = -11; 
String hex_value = int_value < 0 
          ? Integer.toHexString(int_value+65536) : Integer.toHexString(int_value); 
String shortHexString = hex_value.substring(2); 

değiştirdiniz bu çözmek için oyuna 2'ye tümleyen alır beri -B ediyorum 16 şimdi beklenen sonuçları alabilirsiniz. Mutlu kodlama :)

  • Liste öğesi
0
String.format("#%06X", (0xFFFFFF & colorYellow)); 

Çıktı: Bu dönüşüm yapmak did #FFC107