将字符串(FF FF FF FF FF FF FF FF FF)转换为int数组java

时间:2014-02-13 14:41:42

标签: java android hashmap hex type-conversion

我正在使用类似这样的条目解析XML文件:  <control key="test">FF FF FF FF FF FF FF FF</control>

我将它们保存到HashMap,现在我想将String转换为int[]

但我不知道该怎么办。 我试图用这个解析它:Interger.parseInt(mEntry.getValue().toString(), 16);,但它失败了,错误为NumberFormatExceptoin: Invalid int: "FF FF FF FF FF FF FF FF"

我搜索了我的问题,但没有找到解决我问题的方法。 有什么可以做到的吗?可能已将其保存在Hashmap作为int[]

这里是解析代码:

public static Map<String, String> paramListConf1(Context c, int listResID) {
    Map<String, String> map = null;
    XmlResourceParser parser = c.getResources().getXml(listResID);

    String key = "", value = "";

    try {
        int eventType = parser.getEventType();

        while (eventType != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_DOCUMENT) {
            } else if (eventType == XmlPullParser.START_TAG) {
                if (parser.getName().equals("map")) {
                    boolean isLinked = parser.getAttributeBooleanValue(
                            null, "linked", false);

                    map = isLinked ? new LinkedHashMap<String, String>()
                            : new HashMap<String, String>();
                } else if (parser.getName().equals("windowcontrol")) {
                    key = parser.getAttributeValue(null, "key");

                    if (null == key) {
                        parser.close();
                        return null;
                    }
                }
            } else if (eventType == XmlPullParser.TEXT) {
                if (null != key) {
                    value = parser.getText();
                }
            } else if (eventType == XmlPullParser.END_TAG) {
                if (parser.getName().equals("windowcontrol")) {
                    map.put(key, value);
                    key = null;
                    value = null;
                }
            }
            eventType = parser.next();
        }
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

    return map;
}

XML文件:

<?xml version="1.0" encoding="utf-8"?>
<map linked="false">
    <message>
        <window>
        <control key="test1">FF FF FF FF FF FF FF FF</control >
        <control key="test2">EE EE EE EE EE EE EE EE</control >
        <control key="test3">DD DD DD DD DD DD DD DD</control >
        <control key="test4">00 00 00 00 00 00 00 00</control >         
        </window>

</message>
</map>

和实施:

public void getXMLResourceInput() {
    @SuppressWarnings("rawtypes")
    Map keyMap = ResourceUtils.paramListConf1(WindowControlActivity.this, R.xml.config1);

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

    while(iter.hasNext()) {
        @SuppressWarnings("rawtypes")
        Map.Entry mEntry = (Map.Entry) iter.next();
        Integer.parseInt(mEntry.getValue().toString, 16);
    }
}

2 个答案:

答案 0 :(得分:3)

我假设您希望字符串“FF FF FF FF FF FF FF FF”作为整数数组而不是单个整数,因为它对于int和-1来说很大。

    String hexString = "FF FF FF FF FF FF FF FF"; 
    String[] hexNumbers = hexString.split(" ");   //split the string
    int[] ints = new int[hexNumbers.length];      

    for(int i = 0; i<hexNumbers.length; i++) {
        ints[i] = Integer.parseInt(hexNumbers[i], 16);  //convert from hexString to int
    }

    for(int i = 0; i<ints.length; i++) {
        System.out.println(ints[i]);
    }

输出:255 255 255 255 255 255 255 255

NumberFormatException 有两个原因。首先在String和secound中有空格,如果删除它们,它是“FFFFFFFFFFFFFFFF”,大于2 ^ 31-1(正int的最大大小)。

答案 1 :(得分:0)

我认为这是因为FF字节之间的空格。它们应该是FFFFFFFFFFFFFFFF 这将解决它:Integer.parseInt(mEntry.getValue().toString().replaceAll("\\s+",""), 16);