Je dois convertir un int en une valeur hexadécimale. C'est par exemple la valeur int:
int_value = -13516;
Pour convertir en une valeur hexadécimale je fais:
hex_value = Integer.toHexString(int_value);
La valeur que je devrais obtenir est: -34CC
(Je ne sais pas si je devrais le rendre positif).
Le problème, c’est que lors de la conversion, la valeur que j’obtiens est: ffff cb34
Puis-je utiliser cette fonction pour effectuer cette conversion?
La documentation indique que Integer.toHexString
renvoie la représentation hexadécimale de int
sous forme de valeur non signée.
Je crois que Integer.toString(value, 16)
accomplira ce que vous voulez.
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
String.format("#%06X", (0xFFFFFF & colorYellow));
Sortie: #FFC107
Integer.toHexString, ainsi que String.format ("% x") ne prennent pas en charge les signes. Pour résoudre le problème, vous pouvez utiliser une expression ternaire:
int int_value = -13516;
String hex_value = int_value < 0
? "-" + Integer.toHexString(-int_value)
: Integer.toHexString(int_value);
Passez par le code suivant pour la conversion de nombre entier en hexa et de hex en entier
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);
}
}
Je ne pense pas que les réponses ci-dessus vous donneraient la valeur exacte des bits signés. Par exemple, la valeur de 11 est 0B mais la valeur de -11 serait F5 et non -B puisque le complément à 2 entre dans le jeu pour résoudre ce problème, j’ai modifié la réponse ci-dessus.
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);
où, 65536 est 2 ^ 16 maintenant, vous pouvez obtenir les résultats escomptés. Bonne codage :)