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

时间:2015-05-22 23:40:23

标签: java hex bytearray checksum

这是问题所在,我需要用Java来做: 我需要创建一个带十六进制值的字节数组,通过套接字发送到设备。消息格式是这样的

  

STX cmd1 Arg1,cmd2 ETX校验和//任意数量的命令和参数

示例:  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}
你能帮我吗?如何转换这些数字/字符并分配给字节数组?

2 个答案:

答案 0 :(得分:1)

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

要知道的一点是,无符号字节从0到255(0x00到0xFF)。在Java中,只有签名数据类型,字节从-128到+127。

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

如果字段3& 5 int将它们转换为byte s很好,但是知道当转换为字节时超过+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

答案 1 :(得分:0)

难道你不能只使用Sotirios Delimanolis在评论中提出的内容并将你的char变量放在那里吗?

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

或者我在这里遗漏了什么?