我正在尝试解码和读取从设备发送的二进制数据,我需要提取二进制结构内的十进制数。 这是结构细节:
(2)同步消息格式 typedef struct
{
WORD
SyncHeader;
WORD
SyncID;
DWORD UnitID;
} SyncStruct;
例如,收到的消息是
0xFA 0xF8 0x1B 0x01 0x81 0x60 0x33 0x3C
现在,如果结构定义良好,我有一个小的java代码,它读取不同的结构,但实现了相同的原则:
private String getId(ChannelBuffer buf) {
String id = "";
for (int i = 0; i < 7; i++) {
int b = buf.getUnsignedByte(i);
// First digit
int d1 = (b & 0xf0) >> 4;
if (d1 == 0xf) break;
id += d1;
// Second digit
int d2 = (b & 0x0f);
if (d2 == 0xf) break;
id += d2;
}
return id;
}
我需要对我的小型java代码进行哪些修改才能在变量中读取和存储SyncID消息序列号(十进制值)?
由于
答案 0 :(得分:1)
将您的字节放在一个字节数组中,并使用ByteBuffer从中读取数字
ByteBuffer bb = ByteBuffer.wrap(byteArray);
int syncHeader = bb.getShort();
int syncId = bb.getShort();
int unitId = bb.getInt();
也可以只读取syncId
ByteBuffer bb = ByteBuffer.wrap(byteArray);
int syncId = bb.getShort(2);