使用Java將諸如0xBD3E9110
之類的字符串轉換爲BitSet
(例如1011 1101 0011 1110 1001 0001 0001 0000
)的最佳和最簡單的方法是什麼?即,形式的方法:Java六進制字符串到位集
public BitSet hexStringToBitSet(String hexString) {
//...
}
我想獲得BitSet
,這樣我可以使用get(i)
,以獲得每一個返回的32位中的true
/false
值。
使用Java將諸如0xBD3E9110
之類的字符串轉換爲BitSet
(例如1011 1101 0011 1110 1001 0001 0001 0000
)的最佳和最簡單的方法是什麼?即,形式的方法:Java六進制字符串到位集
public BitSet hexStringToBitSet(String hexString) {
//...
}
我想獲得BitSet
,這樣我可以使用get(i)
,以獲得每一個返回的32位中的true
/false
值。
這似乎工作。
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);
}
即假定值被限制爲適合一個'long',例如一個值'「0xBD3E9110BD3E9110BD3E9110BD3E9110BD3E9110」'不起作用。 – Andreas
@Andreas每個返回的32位的單詞都隱藏在問題的末尾。 –
查找Java API documentation中的BitSet。在那裏,您會找到幾種創建所需值的BitSet的方法。也許valueOf(long[])將是最容易使用的情況下,即使你只需要一個元素而不是整個數組,而且你想要一個int,但是long也是可以的。您可以使用Long.decode(String)
創建一個長整型,然後將其放入一個元素的數組中,並將其傳遞給BitSet。你只需要BitSet的前32位。
嘗試這種情況:
import javax.xml.bind.DatatypeConverter;
BitSet bits = BitSet.valueOf(DatatypeConverter.parseHexBinary(hexbinary));
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());
}
在地圖定義值,則分割字符串 – redFIVE