[英]Java parsing byte
我有一個字節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位?
您可以使用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
嘗試
boolean still = (b & 0xC) == 0x0;
boolean noStill = (b & 0xC) == 0x4;
boolean stationed = (b & 0xC) == 0x8;
boolean slow = (b & 0xC) == 0xC;
bitwise AND
( &
)
例:
myByte & 0x08 --> myByte & 00001000 --> 0 if and only if bit 4 of "myByte" is 0; 0x08 otherwise
如果我理解正確,您希望像這樣解析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 */}
}
switch ((b>>3)&3){
case 0: return still;
case 1: return noStill;
case 2: return stationed;
case 3: return slow
}
在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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.