我有一个家庭作业,我需要在十进制,二进制和十六进制之间进行三向转换。我需要帮助的功能是将十进制转换为十六进制。我几乎不了解十六进制,但是如何将十进制转换为十六进制。我需要一个接受int dec
并返回String hex
的函数。不幸的是,我没有这个函数的任何草稿,我完全迷失了。
public static String decToHex(int dec)
{
String hex = "";
return hex;
}
此外,我不能使用这些预制函数,如 Integer.toHexString()或任何东西,我需要实际制作算法,否则我不会学到任何东西。
一种可能的解决方案:
import java.lang.StringBuilder;
cl 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);
}
}
输出:
1234BABE
无论如何,有一个库方法:
String hex = Integer.toHexString(dec);
简单:
public static String decToHex(int dec)
{
return Integer.toHexString(dec);
}

我需要一个函数,它接受一个 int dec 并返回一个字符串十六进制。
我从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;
}
免责声明:我在我的编码面试中提出这个问题,我希望这个解决方案不会太受欢迎:)
2016 年 6 月 17 日编辑:我添加了base
变量,以灵活地转换为任何基数:二进制,八进制,7 的基数...
根据评论,此解决方案是最优雅的,因此我删除了Integer.toHexString()
的实现。
编辑 2015 年 9 月 4 日:我找到了一个更优雅的解决方案http://introcs.cs.princeton.edu/java/31datatype/Hex2Decimal.java.html

考虑下面的 dec2m 方法,用于从 dec 转换为 hex,oct 或 bin。
示例输出为
28 dec == 11100 bin
28 dec == 34 oct
28 dec == 1C hex
public cl Conversion {
public static void main(String[] argv) {
int x = 28; // sample number
if (argv.length > 0)
x = Integer.pInt(argv[0]); // number from command line
System.out.printf("%d dec == %s bin\n", i, dec2m(x, 2));
System.out.printf("%d dec == %s oct\n", i, dec2m(x, 8));
System.out.printf("%d dec == %s hex\n", i, dec2m(x, 16));
}
static String dec2m(int N, int m) {
String s = "";
for (int n = N; n > 0; n /= m) {
int r = n % m;
s = r < 10 ? r + s : (char) ('A' - 10 + r) + s;
}
return s;
}
}
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(23条)