从java中的十六进制字符串值获得2的补码

时间:2014-02-21 08:03:13

标签: java string hex

我有一个字符串格式的十六进制值“FF30”。我需要这个数字的二进制补码值。我现在正在做,首先将它转换为二进制然后取2的补码。这有任何简单的方法。

1 个答案:

答案 0 :(得分:1)

您是否需要 2的补码操作应用于此值,或者您是否需要将其解释为2的补码?如果是后者,则跳过下面的第二行代码。

我认为这对你有用。

 int val = Integer.parseInt("FF30", 16);
 int result = (~val) + 1;

<强>更新

由于您在评论中暗示您希望将结果转换回字符串,因此调用&#34; toHexString&#34;这是一个简单的问题。并切断任何带前缀的填充位

    String hex = "FF30";

    int length = hex.length();


    long value = Long.parseLong(hex,  16);  // convert hex string to long
    long result = (~value) + 1;             // compute the 2's complement

    // convert the result value back to a hex string (keeping the same length and dropping any sign-extension bits)
    String resultAsString = Long.toHexString(result);

    // chop off the prefix of the string so the result is the same length as the input
    int newLength = resultAsString.length();
    if (newLength > length)
    {
        resultAsString = resultAsString.substring(newLength-length);
    }

    System.out.print(resultAsString);