我下面的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
。我在这里做错了什么?
答案 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);
从文档中,x
与X
相同,但以下情况除外:
由大写字母表示的转化(即'B','H','S','C','X','E','G','A'和'T')除了根据现行Locale的规则将结果转换为大写字母外,它们与相应的小写字母转换字符的字符相同。结果等同于以下
String.toUpperCase()
:out.toUpperCase()
的调用。