Java十六进制

Mar*_*era 6 java hex

我有个消息

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端口,我得到了正确的硬件反应

我知道这0x011值,并且发送真的像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>范围的值

fge*_*fge 4

您可能想使用 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 数据包。