Hallo!
Ich habe ein byte Array. Ebenso habe ich die Angabe "from" und "size":
from: startpunkt des Bits
size: anzahl der Bits.
Ich muss also aus einem ByteArray einen Wert holen, welcher durch die Bitpositionen angegeben wird:
Nun habe ich 2 Probleme:
BitSet nimmt das Byte Aray "verkehrt" herum:
0x00 0x85 0x6b 0x0f
bei meinen Angaben ist 0x00 die Position 0.
beim BitSet jedoch Pos 4
1. Frage
Kann ich das Array irgendwie "umdrehen"? Das BitSet soll 0x0f als höchstes Byte nehmen. Denk es hat mit Little Endian und Big Endian zu tun?
2. Frage
GIbt eventuell einen eleganteren Weg das Ziel zu erreichen?
3. Frage
Warum greift die Zuorndung der Schleifenvariable nicht: i = aBs.nextSetBit(i);
Vielen Dank!
Ich habe ein byte Array. Ebenso habe ich die Angabe "from" und "size":
from: startpunkt des Bits
size: anzahl der Bits.
Ich muss also aus einem ByteArray einen Wert holen, welcher durch die Bitpositionen angegeben wird:
Java:
byte[] testByte = new byte[4];
testByte[0] = 0x00;
testByte[1] = (byte) 0x85;
testByte[2] = 0x6b;
testByte[3] = 0x0f;
System.out.println(getValueFromByteArray(testByte, 8, 16));
}
private static int getValueFromByteArray(byte[] byteArray, int from,
int size) {
// Leeres Bitset mit der Größe von size anlegen
BitSet vBs = new BitSet(size - 1);
// Leeres Bitset anlegen und dann aus dem ByteArray füllen
BitSet aBs = new BitSet();
aBs = BitSet.valueOf(byteArray);
// Bits vom ByteArray aufs leere Bitset übertragen
for (int i = from; i < (from + size); i++) {
if (aBs.get(i)) {
vBs.set(i - from);
i = aBs.nextSetBit(i);
}
}
// Kontrolle
System.out.println(vBs);
int value = 0;
int pow = 1;
// auf Integer umrechnen
for (int i = 0; i < (from + size); i++, pow <<= 1) {
if (vBs.get(i)) {
value |= pow;
}
}
return value;
}
Nun habe ich 2 Probleme:
BitSet nimmt das Byte Aray "verkehrt" herum:
0x00 0x85 0x6b 0x0f
bei meinen Angaben ist 0x00 die Position 0.
beim BitSet jedoch Pos 4
1. Frage
Kann ich das Array irgendwie "umdrehen"? Das BitSet soll 0x0f als höchstes Byte nehmen. Denk es hat mit Little Endian und Big Endian zu tun?
2. Frage
GIbt eventuell einen eleganteren Weg das Ziel zu erreichen?
3. Frage
Warum greift die Zuorndung der Schleifenvariable nicht: i = aBs.nextSetBit(i);
Vielen Dank!