fly*_*els 18 java hex decimal converter
我有一个家庭作业,我需要在十进制,二进制和十六进制之间进行三向转换.我需要帮助的函数是将十进制转换为十六进制.我几乎不了解十六进制,但仍然如何将十进制转换为十六进制.我需要一个接收int dec并返回a 的函数String hex.不幸的是我没有这个功能的任何草稿,我完全迷失了.我只有这个.
public static String decToHex(int dec)
{
String hex = "";
return hex;
}
Run Code Online (Sandbox Code Playgroud)
此外,我不能使用像Integer.toHexString()或其他任何东西的预制函数,我需要实际制作算法,否则我就不会学到任何东西.
kol*_*kol 35
一种可能的方案:
import java.lang.StringBuilder;
class Test {
private static final int sizeOfIntInHalfBytes = 8;
private static final int numberOfBitsInAHalfByte = 4;
private static final int halfByte = 0x0F;
private static final char[] hexDigits = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
};
public static String decToHex(int dec) {
StringBuilder hexBuilder = new StringBuilder(sizeOfIntInHalfBytes);
hexBuilder.setLength(sizeOfIntInHalfBytes);
for (int i = sizeOfIntInHalfBytes - 1; i >= 0; --i)
{
int j = dec & halfByte;
hexBuilder.setCharAt(i, hexDigits[j]);
dec >>= numberOfBitsInAHalfByte;
}
return hexBuilder.toString();
}
public static void main(String[] args) {
int dec = 305445566;
String hex = decToHex(dec);
System.out.println(hex);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
1234BABE
Run Code Online (Sandbox Code Playgroud)
无论如何,有一个库方法:
String hex = Integer.toHexString(dec);
Run Code Online (Sandbox Code Playgroud)
And*_* L. 22
简单:
public static String decToHex(int dec)
{
return Integer.toHexString(dec);
}
Run Code Online (Sandbox Code Playgroud)
如上所述:Java将整数转换为十六进制整数
Ray*_*non 12
我需要一个接受int dec并返回String hex的函数.
我从http://introcs.cs.princeton.edu/java/31datatype/Hex2Decimal.java.html找到了一个更优雅的解决方案 .我从原来改变了一点(见编辑)
// precondition: d is a nonnegative integer
public static String decimal2hex(int d) {
String digits = "0123456789ABCDEF";
if (d <= 0) return "0";
int base = 16; // flexible to change in any base under 16
String hex = "";
while (d > 0) {
int digit = d % base; // rightmost digit
hex = digits.charAt(digit) + hex; // string concatenation
d = d / base;
}
return hex;
}
Run Code Online (Sandbox Code Playgroud)
免责声明:我在编码面试中使用此算法.我希望这个解决方案不会太受欢迎:)
编辑2016年6月17日:我添加了base变量,以便灵活地更改为任何基础:二进制,八进制,7的基数...
根据评论,这个解决方案是最优雅的,所以我删除了实现Integer.toHexString().
编辑2015年9月4日:我找到了一个更优雅的解决方案http://introcs.cs.princeton.edu/java/31datatype/Hex2Decimal.java.html