Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改位顺序_Java_Android_Hex_Bit - Fatal编程技术网

Java 更改位顺序

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;

我有一个函数,可以将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;
}
让我们假设
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!!我的错!只是理解错了!这样做是对的!