Java代码问题将十进制代码转换为十六进制?

时间:2013-12-27 12:09:35

标签: java decimal hex

我下面的Java代码演示给了我一些问题。

以下是示例:

public class MyTest 
{
    public static void main(String as[])
    {
        String ColorHex="#4EB3A2";
        int RedColor = Integer.parseInt(ColorHex.substring(1,3), 16);
        int GreenColor = Integer.parseInt(ColorHex.substring(3,5), 16);
        int BlueColor = Integer.parseInt(ColorHex.substring(5,7), 16);
        int finalColorValue = 65536 * RedColor + 256*GreenColor + BlueColor;
        int ColorDecimal=finalColorValue;
        int red = ColorDecimal % 256;
        ColorDecimal = ( ColorDecimal - red ) / 256;
        int green = ColorDecimal % 256;
        ColorDecimal = ( ColorDecimal - green ) / 256;
        int blue = ColorDecimal % 256;
        ColorDecimal = ( ColorDecimal - blue ) / 256;

        String hex = String.format("#%02x%02x%02x", red, green, blue);
        System.out.println("hex"+hex);
    }
}

此处hex应该是#4EB3A2,但它会返回#a2b34e。我在这里做错了什么?

3 个答案:

答案 0 :(得分:5)

以下解决了您的问题:

    String ColorHex="#4EB3A2";

    int RedColor = Integer.parseInt(ColorHex.substring(1,3), 16);
    int GreenColor = Integer.parseInt(ColorHex.substring(3,5), 16);
    int BlueColor = Integer.parseInt(ColorHex.substring(5,7), 16);

    int finalColorValue = 65536 * RedColor + 256*GreenColor + BlueColor;
    int ColorDecimal=finalColorValue;

    // Blue extracted first.
    int blue = ColorDecimal % 256;
    ColorDecimal = (ColorDecimal - blue ) / 256;

    int green = ColorDecimal % 256;
    ColorDecimal = (ColorDecimal - green ) / 256;

    int red = ColorDecimal % 256;
    ColorDecimal = (ColorDecimal - red ) / 256;

    String hex = String.format("#%02x%02x%02x", red, green, blue);
    System.out.println("hex" + hex);

<强>解释

蓝色占据ColorDecimal中的最低字节,因此应首先从中提取它。

答案 1 :(得分:1)

为什么你需要编写自己的代码,而这可以通过

轻松完成
 long parseLong = Long.parseLong("4EB3A2", 16); //hexadecimal to decimal
 String hexString = Long.toHexString(parseLong); //decimal to hexadecimal

答案 2 :(得分:-2)

您需要确保以正确的顺序计算并传递红色,绿色,蓝色值。

此外,要获得相同的输出,您需要使用大写X进行格式化:

String hex = String.format("#%02X%02X%02X", red, green, blue);

从文档中,xX相同,但以下情况除外:

  

由大写字母表示的转化(即'B','H','S','C','X','E','G','A'和'T')除了根据现行Locale的规则将结果转换为大写字母外,它们与相应的小写字母转换字符的字符相同。结果等同于以下String.toUpperCase()out.toUpperCase()的调用。