我有以下几点:转换一个字节或int位集合
int num=Integer.parseInt(lineArray[0]);
byte numBit= num & 0xFF;
是否有numBit
转换为位阵列的任何非常简单的方法?或者甚至更好,有没有办法绕过int和直接从num
直接转换为位数组?
感谢
我有以下几点:转换一个字节或int位集合
int num=Integer.parseInt(lineArray[0]);
byte numBit= num & 0xFF;
是否有numBit
转换为位阵列的任何非常简单的方法?或者甚至更好,有没有办法绕过int和直接从num
直接转换为位数组?
感谢
如果你想有一个BitSet,尝试:
final byte b = ...;
final BitSet set = BitSet.valueOf(new byte[] { b });
如果你想有一个boolean[]
,
static boolean[] bits(byte b) {
int n = 8;
final boolean[] set = new boolean[n];
while (--n >= 0) {
set[n] = (b & 0x80) != 0;
b <<= 1;
}
return set;
}
,或者等价地,
static boolean[] bits(final byte b) {
return new boolean[] {
(b & 1) != 0,
(b & 2) != 0,
(b & 4) != 0,
(b & 8) != 0,
(b & 0x10) != 0,
(b & 0x20) != 0,
(b & 0x40) != 0,
(b & 0x80) != 0
};
}
我遇到了这个答案,并希望指出'BitSet.valueOf()'方法只在Java 7及更高版本中。这个问题没有指定Java版本,但如果你在Java 6中,你应该能够采取其中一种方法来创建一个布尔[]来填充一个BitSet对象。 – 2015-01-23 16:06:58
不应该是'set [n] =(b&0x80)!= 0;'在你的第二个片段中吗? 而你需要在你的while循环中进行后期增量:'while(n--> 0)'。否则,你跳过位0. – Jaykob 2015-11-03 13:05:14
@Jaykob谢谢,更正为 – oldrinb 2015-11-04 14:24:46
你可以这样做:
char[] bits = Integer.toBinaryString(num).toCharArray();
得到底层位字符串作为char[]
例如
public BitSet getBitSet(int num){
char[] bits = Integer.toBinaryString(num).toCharArray();
BitSet bitSet = new BitSet(bits.length);
for(int i = 0; i < bits.length; i++){
if(bits[i] == '1'){
bitSet.set(i, true);
}
else{
bitSet.set(i, false);
}
}
return bitSet;
}
你也可以这样创建boolean []
数组。
你在这里做了双重工作 - 'toBinaryString()'也遍历这些位。当'i
Java 7中已经BitSet.valueOf( long [])和BitSet.toLongArray()
int n = 12345;
BitSet bs = BitSet.valueOf(new long[]{n});
我来到这个线程,因为Android的加入BitSet.valueOf()
迟在API 19 我用oldrinb的接受答案的第二个片段,但不得不修改它,因为它有一些错误。此外,我修改它返回一个BitSet,但它不应该是一个问题,将其更改为布尔[]。看到我对他的回复的评论。
这是现在成功运行的修改:使用只是一个锻炼; Tibial流(J8 +)
public static BitSet toBitSet(byte b) {
int n = 8;
final BitSet set = new BitSet(n);
while (n-- > 0) {
boolean isSet = (b & 0x80) != 0;
set.set(n, isSet);
b <<= 1;
}
return set;
}
:我在你的情况猜测这会为太
// J7+
BitSet bitSet(final long... nums) {
return BitSet.valueOf(nums);
}
// J8+
final IntStream bitsSet = bitSet(num).stream();
// vice-versa
BitSet bitSet(final IntStream bitsSet) {
return bitsSet.collect(BitSet::new, BitSet::set, BitSet::or);
}
// without BitSet
IntStream bitsSet(final long... nums) {
return IntStream.range(0, nums.length)
.flatMap(n -> IntStream.range(0, Long.SIZE - 1)
.filter(i -> 0 != (nums[n] & 1L << i))
.map(i -> i + n * Long.SIZE));
}
... [Stackoverflow - 从整数长度的位集] [1] [1]:http://stackoverflow.com/questions/2473597/bitset-to-and-from-integer-long – Pr0gr4mm3r 2012-08-05 22:05:01
你是指'boolean []'或'BitSet'? – dacwe 2012-08-05 22:06:01