在 java 中创建十六进制字节数组

creating hex byte array in java

这里是问题所在,我需要在Java中完成: 我需要创建一个具有十六进制值的字节数组,以通过套接字发送到设备。消息格式是这样的

STX cmd1 Arg1 , cmd2 ETX Checksum // Any number of commands and arguments

示例: STX A 1 ETX 148 // 1 和 148 是十进制的 STX 是 0x02 和 ETX 是 0x03 ,不是文本 STX 和 ETX。

为上面的例子生成的字节数组是这样的:

    STX         A            1         ETX         148
    {(byte)0x2,(byte)0x41,(byte)0x31,(byte)0x3, (byte)0x94}

你能帮帮我吗?我如何转换这些 numbers/characters 并分配给字节数组?

您不能只使用 Sotirios Delimanolis 在评论中提出的建议并将您的 char 变量放在那里吗?

char a = 'A';
char b = '1';
byte[] buffer = {(byte)0x2, (byte)a, (byte)b, (byte)0x3, (byte)0x94};

还是我漏掉了什么?

除非我弄错了,否则你已经在朝着正确的方向前进。

需要知道的几件事,一个无符号字节从 0 到 255(0x00 到 0xFF)。在Java中,只有有符号数据类型,一个字节从-128到+127。

System.out.println(Byte.MIN_VALUE); // -128
System.out.println(Byte.MAX_VALUE); // +127

如果字段 3 和 5 是 ints 将它们转换为 bytes 是可以的,但要知道任何超过 +127 的转换为字节时都会溢出到负数范围内。

System.out.println((byte)0x94); // -108
System.out.println((byte)148);  // -108

如果您想要字节的实际正值,您可以 AND 每个字节对应 0xFF。

System.out.println(((byte)-108) & 0xFF); // +148
System.out.println(((byte)-1) & 0xFF);   // +255