2013-08-07 81 views
-2

我有一个函数将int转换为十六进制。在这个函数中,我得到一个0到100之间的seekbar值。然后我做了一些改变,最后我将它转换为十六进制。更改位的顺序

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转换为位置9831,然后减1以得到9830,最后,更改位以获得值为55705的值,该值在十六进制中将为D999

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

代码在C:

if (int_value < 0) { 

     c2_value = int_value * -1; 
     c2_value = c2_value - 1; 
     c2_final = ~c2_value; 
    } 
+0

'-9831' **是十六进制的**'-2667'。目前还不清楚你在问什么,或者你将如何从中获得一些魔术'55705' /'D999'。 –

+0

我刚刚在上一篇文章中添加了代码。我需要的价值是相同的,所以如果他得到那个,我需要得到那个。当他做这个'c2_final =〜c2_value;'他将9830的值传递到55705.当我这样做时,我得到9830的值回到-9380。我认为他只是将一个已签名的值转换为未签名的值或其他值。 – masmic

+0

你有没有试过我在回答中提供的代码? –

回答

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); 
+0

这就是我第一次做的,但我得到这个额外的字节'ffff',我不需要 – masmic

+0

@ masmic_87,好的。你知道'-'会将所有代码二进制字段转换为'1'吗?它曾经是补充。我正在编辑我的代码。去尝试一下。 –

+0

好的@Chintan Rathod,但我认为这个例子和第一个例子是一样的。我的意思是,正如我所理解的,我这样做'Integer.toHexString(-9831)'得到这个'ffffd999'。这样做后,我需要的只是最后2个字节,这是d999的值。我怎样才能做到这一点? – masmic