0

私はバイトbを持っています

バイトは8ビット

bits for single byte

0 = status
1 = locale
2 = AUX
bits (3 & 4) relay
 1. 0 (hence 00) still
 2. 1 (hence 01) noStill
 3. 2 (hence 10) stationed
 4. 3 (hence 11) slow
5 = message;
6 = stuff
7 = moreStuff

ビット3と4をどのように解析しますか?

4

6 に答える 6

2

クラスを使用BitSetして、バイト値から特定のビットを取得できます。

public static BitSet fromByte(byte b)
{
    BitSet bits = new BitSet(8);
    for (int i = 0; i < 8; i++)
    {
        bits.set(i, (b & 1) == 1);
        b >>= 1;
    }
    return bits;
}

上記の方法を使用するBitSetと、バイトの表現を取得し、特定のビットを取得できます。

byte b = ...; // byte value.
System.out.println(fromByte(b).get(2));  // printing bit #3
System.out.println(fromByte(b).get(3));  // printing bit #4
于 2012-12-27T17:10:21.930 に答える
2

試す

    boolean still = (b & 0xC) == 0x0;
    boolean noStill = (b & 0xC) == 0x4;  
    boolean stationed = (b & 0xC) == 0x8; 
    boolean slow = (b & 0xC) == 0xC;
于 2012-12-27T17:10:46.937 に答える
1

bitwise AND&

例:

 myByte & 0x08 --> myByte & 00001000 --> 0 if and only if bit 4 of "myByte" is 0; 0x08 otherwise
于 2012-12-27T17:09:34.550 に答える
1

私があなたを正しく理解するなら、あなたはビットを入れて、b[3]このb[4]ように解析することを望みます:

00 = still
01 = noStill
10 = stationed
11 = slow

私はこれをします:

if(b[3] == 0) { // still or noStill
    if(b[4] == 0) {/* still */}
    if(b[4] == 1) {/* noStill */}
}
if(b[3] == 1) { // stationed or slow
    if(b[4] == 0) {/* stationed */}
    if(b[4] == 1) {/* slow */}
}
于 2012-12-27T17:12:03.883 に答える
1
switch ((b>>3)&3){
  case 0: return still;
  case 1: return noStill;
  case 2: return stationed;
  case 3: return slow
}
于 2012-12-27T17:16:28.277 に答える
0

JBBPでは次のようになります

@Bin(type = BinType.BIT) class Parsed { byte status; byte locale; byte aux; byte relay; byte message; byte stuff; byte moreStuff;}
final Parsed parsed = JBBPParser.prepare("bit status; bit locale; bit aux; bit:2 relay; bit message; bit stuff; bit moreStuff;").parse(new byte[]{12}).mapTo(Parsed.class);
于 2014-08-13T10:53:51.407 に答える