[英]creating hex byte array in java
这是问题,我需要用 Java 来做:我需要创建一个带有十六进制值的字节数组,通过套接字发送到设备。 消息格式是这样的
STX cmd1 Arg1 , cmd2 ETX Checksum // 任意数量的命令和参数
示例: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}
你能帮我么。 如何转换这些数字/字符并分配给字节数组?
除非我弄错了,否则你已经朝着正确的方向前进了。
需要知道的一些事情,一个无符号字节从 0 到 255(0x00 到 0xFF)。 在 Java 中,只有带符号的数据类型,一个字节从 -128 到 +127。
System.out.println(Byte.MIN_VALUE); // -128
System.out.println(Byte.MAX_VALUE); // +127
如果字段 3 和 5 是int
s,则将它们转换为byte
s 很好,但要知道任何超过 +127 的内容在转换为字节时都会溢出到负范围。
System.out.println((byte)0x94); // -108
System.out.println((byte)148); // -108
如果您想要字节的实际正值,您可以将每个字节与 0xFF 进行AND
运算。
System.out.println(((byte)-108) & 0xFF); // +148
System.out.println(((byte)-1) & 0xFF); // +255
您不能使用 Sotirios Delimanolis 在评论中提出的内容并将您的 char 变量放在那里吗?
char a = 'A';
char b = '1';
byte[] buffer = {(byte)0x2, (byte)a, (byte)b, (byte)0x3, (byte)0x94};
还是我在这里遗漏了什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.