【问题标题】:Convert Decimal (Base 10) to Hexadecimal (Base 16) in Java在 Java 中将十进制(以 10 为底)转换为十六进制(以 16 为底)
【发布时间】:2020-10-04 19:08:26
【问题描述】:

我的问题是关于 Java 的。

如何使用 Java 7 在 Java 中将十进制(Base 10)转换为十六进制(Base 16)?

当我在 C# 中使用带有字符串“BQoPFBke”的 Convert.FromBase64String(str) 方法时,我得到结果:05-0A-0F-14-19-1E

但是当我在 Java 中使用具有相同字符串的 Base64.Decoder.decode(str) 方法时,我得到的结果是:[5, 10, 15, 20, 25, 30]

我尝试将十进制转换为十六进制:

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;
}

但是当我使用例如 decima2hex(15) 时,该方法仅返回:F。但我需要得到:0F。

如何做到这一点?

【问题讨论】:

  • 那么问Java还是c#?当你添加标签时,你应该完成句子“我的问题是关于......”。
  • 在 c# 中,你不会得到你发布的破折号,你会得到一个与 Java 相同的字节数组。您只是将 c# 中的结果视为十六进制数字,但它仍然是相同的数字。

标签: java hex decimal


【解决方案1】:

使用Integer.toHexStringString.format

public class Main {
    public static void main(String[] args) {
        // Test hexadecimal representation of integers from 0 to 15
        for (int i = 0; i < 16; i++) {
            System.out.print(decimal2Hex(i) + " ");
        }
    }

    public static String decimal2Hex(int d) {
        return String.format("%2s", Integer.toHexString(d)).toUpperCase().replace(' ', '0');
    }
}

输出:

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 

【讨论】:

    【解决方案2】:

    请试试这个。

    十六进制 = hex.length()

    带有输入和输出的完整程序

    public class App
    {
    
    
        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;
            }
            hex = hex.length() <= 1 ? String.format("0%s", hex) : hex;
    
            return hex;
        }
    
        public static void main(String[] args)
        {
    
            int[] nos = {5, 10, 15, 20, 25, 30};
            System.out.println("I/P");
            Arrays.stream(nos).forEach(System.out::println);
            System.out.println("O/P");
            Arrays.stream(nos).forEach(i ->
            {
                System.out.println(decimal2hex(i));
            });
        }
    

    以上程序的输出

    I/P
    5
    10
    15
    20
    25
    30
    O/P
    05
    0A
    0F
    14
    19
    1E
    

    【讨论】:

    • 您不需要转换。这不是正确的解决方案。所做的只是将数字更改为此解决方案不需要的字符串。
    • 谢谢@Knowledge_seeker!!!我爱你!!!不幸的是,我不能投票给你,因为我的声誉低于 15 :( ....
    • 您必须阅读帖子的标题和详细信息。有时标题是 OP 需要的,有时是 OP 需要的详细信息。在这种情况下,我最好的情况是 OP 不需要转换。 OP没有说明他是否有任何问题。只是在一种情况下,他看到的是十六进制,另一种情况是十进制。
    • @jdweng ,好吧,如果我理解正确你的评论,这真的不是问题。程序是正确的,不需要修改。是否正确。
    • 不知道有没有问题。只是 OP 注意到不同的是 Java 和 VS 中数字的显示。
    猜你喜欢
    • 2012-03-14
    • 2010-10-14
    • 2022-12-07
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    相关资源
    最近更新 更多