将整数转换为十六进制Java

时间:2014-02-17 10:35:46

标签: java android arrays

我需要为我的应用程序提供这种int []格式,正如我在标题中所写的那样。

我从HashMap中取出了一个用{00,00,00,00]格式填充的XML文件中的值,但我需要每个int的{​​{1}} 0x在前面。

我试图通过for循环“转换”它:

for(int i = 0; i < value.length; i++){
        value[i] = "0x"  + value[i];
    }

但我无法通过这种方式从String转换为int

然后我尝试直接在XML文件中更改它,但随后我的应用程序崩溃了NPE。

现在我想知道我的问题是否有解决方案。

修改

进一步说明:

我之前尝试过这个,但它不起作用:

public int[] getValue(Map map, String key) {
    Map keyMap = map;
    int[] value = {};

    @SuppressWarnings("rawtypes")
    Iterator iter = keyMap.entrySet().iterator();

    while (iter.hasNext()) {
        @SuppressWarnings("rawtypes")
        Map.Entry mEntry = (Map.Entry) iter.next();
        if (mEntry.getKey().equals(key)) {
            value = (int[]) mEntry.getValue();
        }
    }
    return value;
}

然后我尝试了其中一个答案并添加了

for(int i = 0; i < value.length; i++){
        value[i] = Integer.valueOf(String.valueOf(value[i]), 16);
    }
返回之前

。现在它有效......但我不知道它为什么会起作用:(

2 个答案:

答案 0 :(得分:2)

在任何类型语言中,int / number值没有格式。 Java存储int值的方式是使用二进制补码的4字节数,因此0或0x0或00(八进制)或0b是相同的值:二进制字中的32个零。

第二次编辑:

我认为你过度工程了。你应该使用的是

Map<String,int[]> map;

然后,如果你写map.get(key),你将获得你正在寻找的东西。

新说明:之前的解决方案有效,因为当您读取XML时,将值存储为十进制值:

String s="80";
int i= Integer.valueOf(s); //it stores 80 (decimal value)
int value= Integer.valueOf(String.valueOf(i),16); //It stores 128, or 0x80 (hex value)

答案 1 :(得分:1)

for(int i = 0; i < value.length; i++){
    value[i] = Integer.valueOf(String.valueOf(value[i]), 16);
}

试试这个。如果你想要十六进制值。或者如果你想要十六进制字符串,你可以使用下面的代码。

Integer.toHexString(integerValue)