Java 更改位顺序
我有一个函数,可以将int转换成十六进制。在这个函数中,我得到一个介于0和100之间的seekbar值。然后我做了一些修改,最后我把它转换成十六进制Java 更改位顺序,java,android,hex,bit,Java,Android,Hex,Bit,我有一个函数,可以将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;
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;
}
让我们假设inti
值为52。这将获取下一个值:int\u 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;
}
if(int_值<0){
c2_值=int_值*-1;
c2_值=c2_值-1;
c2_final=~c2_值;
}
java.lang.Integer
提供将指定整数转换为其十六进制字符串表示形式的方法
你可以像下面这样使用
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);
-9831
是十六进制的-2667
。不清楚你在问什么,也不清楚你如何从中获得一些神奇的55705
/D999
。我只是在上一篇文章中添加了代码。我需要值相同,所以如果他得到了,我需要得到。当他这样做时,c2\u final=~c2\u值代码>他将9830值传递到55705。当我这样做时,我得到9830值回到-9380。我想他只是在把一个有符号的值转换成一个无符号的值或其他什么。你试过我在答案中提供的代码吗?在你的答案下回答@Chintan Rathod这是我第一次做的,但我得到了这个额外的字节ffff
,我没有need@masmic_87可以您知道-
会将所有代码二进制字段转换为1
?它曾经是一种补充。我正在编辑我的代码。试试看,好的,但我认为这个例子和第一个是一样的。我的意思是,正如我所理解的,我做这个Integer.tohextstring(-9831)
来得到这个ffffd999
。做了这个之后,我需要的是只获取最后2个字节,这是d999值。我该怎么做?@masmic_87,很简单。使用outputString.substring(4)
。这将为您提供输出d999
:)jajaja,好的,谢谢@Chintan Rathod!!我的错!只是理解错了!这样做是对的!