【问题标题】:change the bits order更改位顺序
【发布时间】:2013-08-08 21:21:24
【问题描述】:

我有一个将 int 转换为 hex 的函数。在这个函数中,我得到了一个介于 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 转换为正值9831,然后减去1 得到9830,最后,更改位以获得值55705,十六进制为D999

我该如何做最后一件事?改变位?

C 代码:

if (int_value < 0) {

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

【问题讨论】:

  • -9831 -2667 十六进制。目前还不清楚你在问什么,或者你将如何从中获得一些魔法 55705 / D999
  • 我刚刚在上一篇文章中添加了代码。我需要相同的价值观,所以如果他明白了,我需要得到那个。当他这样做c2_final = ~c2_value; 时,他将 9830 值传递给 55705。当我这样做时,我将 9830 值返回到 -9380。我认为他只是将有符号值转换为无符号值或其他值。
  • 你试过我在回答中提供的代码吗?
  • 在您的回答下回答@Chintan Rathod

标签: java android hex bit


【解决方案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);

【讨论】:

  • 这是我第一次做的事情,但我得到了我不需要的额外字节 ffff
  • @masmic_87,好的。你知道- 会将所有代码二进制字段转换为1 吗?它曾经的补充。我正在编辑我的代码。试试看吧。
  • 好的@Chintan Rathod,但我认为这个例子与第一个相同。我的意思是,据我所知,我这样做Integer.toHexString(-9831) 是为了得到这个ffffd999。这样做后我需要的是只获取最后 2 个字节,即 d999 值。我该怎么做?
  • @masmic_87,简单。使用outputString.substring(4)。这将为您提供输出d999。 :)
  • jajaja,好的,谢谢@Chintan Rathod!我的错!只是理解错了方法!这样做是对的!
猜你喜欢
  • 2013-06-26
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多