-2

我有一个将 int 转换为十六进制的函数。在这个函数中,我得到了一个介于 0 到 100 之间的搜索栏值。然后我做了一些更改,最后将其转换为十六进制。

    private String decimalToHex(int i) {

    /**Conversion to decimal of the seekbar's % value*/
    int_value = ((i * 20480) / 100) * -1;
    int_value = -20480 - int_value;

    /**Conversion to hex*/
    hex_value = Integer.toString(int_value, 16);
    //hex_value = Integer.toHexString(c2_final);

    return hex_value;
}

让我们假设该int i值为 52。这将获得下一个值:int_value = -9831

当我将此值转换为十六进制时,我得到-2667. 但这不是我需要的值。

我需要进行转换,将十六进制结果作为“D999”之类的值。我通过对值(也就是运算符)进行补码来获得这个值~。这类似于将值转换-9831为 positve 9831,然后减去 1 以获得9830,最后,更改位以获得55705十六进制值D999

我该怎么做这最后一件事?改变位?

C中的代码:

if (int_value < 0) {

        c2_value = int_value * -1;
        c2_value = c2_value - 1;
        c2_final = ~c2_value;
    }
4

1 回答 1

1

java.lang.Integer提供toHexString()方法,该方法将指定的整数转换为其十六进制字符串表示形式。

你可以像下面这样使用。

Log.d(TAG, java.lang.Integer.toHexString(-9831));

这会给你输出

08-07 18:53:57.643: D/Home(31698): ffffd999

要获得您的输出,请使用以下代码。

String strHex = java.lang.Integer.toHexString(-9831);
if (strHex.length() > 4)
    Log.d(TAG, strHex.substring(4));
else
    Log.d(TAG, strHex);
于 2013-08-07T13:27:38.640 回答