java - java将String(FF FF FF FF FF FF FF FF FF)转换为int数组

标签 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);
    }
}

最佳答案

我假设您希望字符串“FF 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 的原因有两个。首先,字符串中有空格,其次,如果删除它们,它是“FFFFFFFFFFFFFFFF”,远大于 2^31-1(正 int 的最大大小)。

关于java - java将String(FF FF FF FF FF FF FF FF FF)转换为int数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21757309/

相关文章:

java - Java Web 应用程序和 Web 服务之间的线程间通信

android - 从 ItemizedOverlay.getIndexToDraw 抛出的 ArrayIndexOutoutBoundsException

java - 如何从 reader.readLine() 返回的字符串中删除 unicode 空格

android - 如何对 arraylist HashMap 进行排序

java - 如何获取 Jackson JsonNode 的路径

java - 如何使 Apache Cayenne 尊重数据库默认设置?

java - JNA结构创建带来麻烦

java - 返回上一个 Activity 时结果不一致

java - 在 HashMap 值中存储两个值

java - 具有多个值的键