android int 到 hex 转换

Posted

技术标签:

【中文标题】android int 到 hex 转换【英文标题】:android int to hex converting 【发布时间】:2013-08-07 08:10:19 【问题描述】:

我必须将 int 转换为十六进制值。例如 int 值:

int_value = -13516;

要转换为十六进制值:

hex_value = Integer.toHexString(int_value);

我应该得到的值是:-34CC(我不知道我是否应该将其设为正数)。

问题是这样进行转换,我得到的值是:ffff cb34

我不能用这个函数来做这个转换吗?

【问题讨论】:

它确实实现了转换!它为您提供了值的十六进制表示,它设置了符号位,因为它是负数。 android 使用二进制补码来表示负整数:负值表示最左边的位被设置,正值表示最左边的位未设置。见Signed number representations。我意识到这已经两年了,但是对底层机制的扎实掌握对于程序员来说是一件很有价值的事情。 :) @LorneLaliberte 如果(例如)您有 C 背景,printf 的 %X 格式说明符会给您提供的任何数字的无符号十六进制表示,无论是否有符号,这仍然是出乎意料的。更糟糕的是,Java 甚至没有 无符号整数类型,所以你甚至无法修复它! @Micheal 在这种情况下 C 和 Java 没有区别,实际上 java 也返回一个无符号值。无论哪种方式,位(以及这些位的十六进制表示)都是相同的。 “有符号”和“无符号”只是对位的不同解释。我认为您可能想刷新您对 C 的 sprintf 函数的记忆,因为 %X 说明符在两种语言中的工作方式相同。 【参考方案1】:

文档说Integer.toHexStringint 的十六进制表示形式返回为无符号值。

我相信Integer.toString(value, 16) 会完成你想要的。

【讨论】:

目前我已经尝试过了,它似乎是正确的方式!【参考方案2】:
public static int convert(int n) 
  return Integer.valueOf(String.valueOf(n), 16);

 // in onstart:
 Log.v("TAG", convert(20) + "");  // 32
 Log.v("TAG", convert(54) + "");  // 84

发件人:Java Convert integer to hex integer

【讨论】:

但是这样做,你不是在做从十六进制到整数的转换吗?我需要换一种方式,从带符号的 int 到 hex。【参考方案3】:

Integer.toHexStringString.format("%x") 都不支持符号。要解决这个问题,可以使用三元表达式:

    int int_value = -13516;
    String hex_value = int_value < 0
                       ? "-" + Integer.toHexString(-int_value)
                       : Integer.toHexString(int_value);

【讨论】:

【参考方案4】:
String.format("#%06X", (0xFFFFFF & colorYellow));

输出:#FFC107

【讨论】:

【参考方案5】:

通过以下代码进行整数到十六进制和十六进制到整数的转换

public class MainActivity extends Activity 

int number;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    number = 678668;
    Log.i("ACT", "Integer Number  " + number);

    /**
     * Code for convert integer number to hex number. two mwthods.
     */
    Log.i("ACT", String.format("#%x", number)); // use lower case x for
                                                // lowercase hex
    Log.i("ACT", "#" + Integer.toHexString(number));

    /**
     * Code for convert hex number to integer number
     */
    String hex = Integer.toHexString(number).replace("/^#/", "");
    int intValue = Integer.parseInt(hex, 16);

    Log.i("ACT", "Integer Number  " + intValue);
   


【讨论】:

【参考方案6】:

我认为上述答案不会为您提供带符号位的确切值。例如 11 的值是 0B 但 -11 的值是 F5 而不是 -B 因为 2 的补码进入游戏来解决这个问题我修改了上面的答案

int int_value = -11;
 String hex_value = int_value < 0
                           ? Integer.toHexString(int_value+65536) :    Integer.toHexString(int_value);
 String shortHexString = hex_value.substring(2); 

其中,65536 是 2^16 现在您可以获得预期的结果。快乐编码:)

列表项

【讨论】:

以上是关于android int 到 hex 转换的主要内容,如果未能解决你的问题,请参考以下文章

Qt如何将串口接收到十六进制转换为十进制,用这个函数不行int hex = str.toInt(&ok, 16);

在 python 中将 HEX 转换为无符号 INT16 [重复]

C#中的Byte,String,Int,Hex之间的转换函数。

如何解决这个错误。 com.google.android.gms.tasks.task executors$zza 无法转换为 android.app.activity。我是 Java 和 Andro

Python的进制转换

字符的HEX字符串转换