我有个消息
static int[] message = {
0x01, 0x10, 0x00,
0x01, // port addres 01 - 08
0x00, 0x01, 0x02,
0x06, 0x00,
0xA4, 0x21
};
Run Code Online (Sandbox Code Playgroud)
我知道数据是正确的,因为我用RXTX将它们写入COM端口,我得到了正确的硬件反应
我知道这0x01是1值,并且发送真的像01(两位,四分之一字节长)
当我需要调整消息时,正在生成这样的值吗?
message[index] = 1 & 0xff
Run Code Online (Sandbox Code Playgroud)
我看到了这个片段的输出,看起来很正常
for (int i = 0; i < 255; i++) {
System.out.println(i & 0xff);
}
Run Code Online (Sandbox Code Playgroud)
有没有你建议我阅读的表格?
将这些数字存储在int右边,因为我们不能使用byte (-128, +127)最大<0x00, 0xFF>范围的值
您可能想使用 aByteBuffer来满足您的需要,并将其包装在一个类下。
我不知道你的确切消息格式,但我们暂时假设这是 3 个字节的数据和 1 个字节的端口:
public final class Message
{
private static final MESSAGE_SIZE = 4;
private static final PORT_OFFSET=3;
private final ByteBuffer buf;
public Message()
{
buf = ByteBuffer.allocate(MESSAGE_SIZE);
}
public void setPort(final byte b)
{
buf.put(PORT_OFFSET, b);
}
// etc
public byte[] getRaw()
{
return buf.array();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您只使用绝对 get/put 方法,您甚至可以使用 ByteBuffer 的 hashCode() 和 equals() 来比较消息(否则需要相当多的练习)。
我使用这种技术来读/写 NRPE 数据包。
| 归档时间: |
|
| 查看次数: |
36434 次 |
| 最近记录: |