0

首先,我从参数“col”收到一个十六进制颜色代码。然后我将此值转换为二进制等效值,然后需要翻转所有位并将其转换回十六进制值。然后需要将十六进制值填充为 6 个字符。

public String invertColor(String col)
{
    String inverted = col;

    int i = Integer.parseInt(inverted, 16);
    String bin = Integer.toBinaryString(i);
    System.out.println(bin);

    int binary = Integer.parseInt(bin,2);
    System.out.println(binary);


    return inverted;
}

这是我到目前为止的代码,我整个早上都在绞尽脑汁,似乎无法找到可行的解决方案。任何帮助将不胜感激。

谢谢

4

3 回答 3

2

使用按位非运算符,~.

int flipped = ~i;
于 2013-04-28T16:07:07.727 回答
0

我们是用 32 位计算二进制表示之前的所有 0,还是只取前面没有 0 的二进制表示?因为这在翻转时会有所不同。如果是前者,你可以使用运算符~。

    int flip = ~i;

但如果是第二个,还有更多工作要做。

于 2013-04-28T16:28:10.773 回答
0
    public String invertColor(String col)
{
    String inverted = col;
    int i = Integer.parseInt(inverted, 16);
   String bin = Integer.toBinaryString(i);
   String flipped = "";
   for (int j = 0; j < bin.length(); j++) {
     if (bin.charAt(j) == '0') flipped += "1";
     else flipped += "0";
   }
   int k = Integer.parseInt(flipped, 2);
   inverted = Integer.toHexString(k);
   return inverted;

}

这应该有效。基本上,如果当前字符为 0,则此代码通过连接 1 来构建字符串,否则为 0。那么k就是翻转后的字符串所代表的整数,反相的是十六进制值。

于 2013-04-28T17:56:34.757 回答