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?
! 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. :) –
@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
@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. –