我需要将整数值转换为十六进制。
我已经完成了一些逻辑,但我想要优化的解决方案。
编辑:抱歉,我忘了发帖说我不允许使用任何内置功能。</ p>
答案 0 :(得分:5)
易:
String hex = Integer.toHexString(int);
基本上它的作用是创建一个新字符串,然后从Integer类中调用一个名为toHexString的方法,该方法需要一个int arg。 所以传递int你想要改成这个方法,你将得到一个带有你的int的十六进制版本的String。
你可以将十六进制值放在int类型中,但是据我所知,当你进行十六进制转换时,你不能从int类型转换为另一种int类型。
请记住,您获取的值是String,因此您无法修改该值,否则您将获得数字格式异常。
答案 1 :(得分:4)
然后看一下Integer.toHexString(int)
的实现。以下代码是从java标准库中的Integer
类中提取的。
public class Test {
final static char[] digits = {
'0' , '1' , '2' , '3' , '4' , '5' ,
'6' , '7' , '8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f'
};
private static String intAsHex(int i) {
char[] buf = new char[32];
int charPos = 32;
int radix = 1 << 4;
int mask = radix - 1;
do {
buf[--charPos] = digits[i & mask];
i >>>= 4;
} while (i != 0);
return new String(buf, charPos, (32 - charPos));
}
public static void main(String... args) {
System.out.println(intAsHex(77));
}
}
输出: 4d
答案 2 :(得分:4)
假设您出于某种原因不想使用内置的toHexString,这是一种非常有效的方法:
public static char toHexChar(int i) {
i&=15;
return (i<10)? (char)(i+48) : (char)(i+55);
}
public static String toHexString(int n) {
char[] chars=new char[8];
for (int i=0; i<8; i++) {
chars[7-i]=toHexChar(n);
n>>=4;
};
return new String(chars);
}
答案 3 :(得分:1)
检查
public class IntToHexa {
public static void main(java.lang.String args[]){
/*
* Here we need an integer to convert.
* [1]You can pass as command line argument
* [2]You can get as input from console
* [3]Take a constant. Here I'm taking a constant
*/
int intToConvert = 450;
java.lang.StringBuilder convertedHexa = new java.lang.StringBuilder("");
while (intToConvert > 15){
/*
* If the reminder is less than 10, add the remainder. else get the equivalent hexa code
* Here I'm getting the character code and adding the charater to the hexa string.
* For that I'm getting the difference between the reminder and 10.
* For example, if the reminder is 13, the reminder will be 3.
* Then add that difference to 65. In this example, it will become 68.
* Finally, get the quivalent char code of the result number. Here it will be D.
* Same for number, I'm adding it to 48
*/
convertedHexa.append(intToConvert % 16 < 10 ? ((char)(48 + (intToConvert % 16))) : ((char)(65 + (intToConvert % 16 - 10))));
intToConvert /= 16;
}
convertedHexa.append(intToConvert % 16 < 10 ? ((char)(48 + (intToConvert % 16))) : ((char)(65 + (intToConvert % 16 - 10))));
java.lang.System.out.println(convertedHexa.reverse());
}
}