2015-10-26 39 views
0

使用Java将诸如0xBD3E9110之类的字符串转换为BitSet(例如1011 1101 0011 1110 1001 0001 0001 0000)的最佳和最简单的方法是什么?即,形式的方法:Java六进制字符串到位集

public BitSet hexStringToBitSet(String hexString) { 
    //... 
} 

我想获得BitSet,这样我可以使用get(i),以获得每一个返回的32位中的true/false值。

+0

在地图定义值,则分割字符串 – redFIVE

回答

3

这似乎工作。

public static BitSet hexStringToBitSet(String hexString) { 
    return BitSet.valueOf(new long[]{Long.valueOf(hexString.substring(2), 16)}); 
} 

public static void main(String[] args) { 
    BitSet bitSet = hexStringToBitSet("0xBD3E9110"); 
    System.out.println(bitSet); 
} 
+0

即假定值被限制为适合一个'long',例如一个值'“0xBD3E9110BD3E9110BD3E9110BD3E9110BD3E9110”'不起作用。 – Andreas

+2

@Andreas每个返回的32位的单词都隐藏在问题的末尾。 –

0

查找Java API documentation中的BitSet。在那里,您会找到几种创建所需值的BitSet的方法。也许valueOf(long[])将是最容易使用的情况下,即使你只需要一个元素而不是整个数组,而且你想要一个int,但是long也是可以的。您可以使用Long.decode(String)创建一个长整型,然后将其放入一个元素的数组中,并将其传递给BitSet。你只需要BitSet的前32位。

0

尝试这种情况:

import javax.xml.bind.DatatypeConverter; 

BitSet bits = BitSet.valueOf(DatatypeConverter.parseHexBinary(hexbinary)); 
0
public BitSet hexStringToBitSet(String hexString) { 

    ByteArrayOutputStream bout = new ByteArrayOutputStream(); 
    for(int i = 0; i < hexString.length() - 1; i += 2) { 
     String data = s.substring(i, i + 2); 
     bout.write(Integer.parseInt(data, 16)); 
    } 
    return BitSet.valueOf(bout.toByteArray()); 
} 
相关问题