을 비트 세트에 값 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
에서 비트 배열로가는 방법은 무엇입니까?
감사
, 시도 :
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 객체를 채울 수있는 방법 중 하나를 사용할 수 있어야합니다. –
두 번째 스 니펫에서'set [n] = (b & 0x80)! = 0;'이 아니어야합니까? 그리고 while 루프에서 'while (n--> 0)'의 후행 증가가 필요합니다.그렇지 않으면 비트 0을 건너 뜁니다. – Jaykob
@Jaykob 감사합니다. – oldrinb
당신은 할 수 :
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 []
어레이를 만들 수 있습니다. 당신이 BitSet를 원하는 경우
여기서 두 번 일하고 있습니다. toBinaryString()은 비트를 반복합니다. 'i
자바 7 BitSet.valueOf를 (있다 long []) 및 BitSet.toLongArray()
안드로이드 내가 허용 대답의 2 조각을 oldrinb의 사용 API (19) 뿐만 늦게BitSet.valueOf()
을 추가하지만 약간의 오차가 있었기 때문에 수정했기 때문에
int n = 12345;
BitSet bs = BitSet.valueOf(new long[]{n});
나는이 스레드에 대한왔다. 또한 BitSet을 반환하도록 수정했지만 부울 []로 변경하면 안됩니다. 그의 대답에 대한 내 의견을 참조하십시오.
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;
}
사용에 그냥 훈련 (J8의 +를) 스트림 :
이
이제 성공적으로 실행 수정입니다// 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));
}
내가 너무 귀하의 경우이 뜻을 생각 ... [유래 - 비트 세트 및 긴 정수로부터] [1] [1] : http://stackoverflow.com/questions/2473597/bitset-to-and-from-integer-long – Pr0gr4mm3r
부울 [] 또는 '비트 세트'를 의미합니까? – dacwe