[英]Convert larger value hex string into bytes using java
我正在尝试将十六进制字符串的较大值转换为字节。 有关转换带符号字节的信息最大为0x7F,仅等于127。 但是现在我想将六值C6转换为我应该接收198的字节。有什么方法可以做到这一点?
目前,我已经使用以下方法测试了我的代码:
static byte[] bytearray = {0x02, 0x08, 0x16, 0x00, 0x00, 0x33, (byte)(Integer.parseInt("C6",16) & 0xff), 0x1B};
static byte[] bytearray = {0x02, 0x08, 0x16, 0x00, 0x00, 0x33, (byte)0xC6, 0x1B};
所有这些方法仅给我相同的值-58。
如果有人可以帮助我,我将不胜感激。 谢谢
使用方法2,不必担心字节数组中的负值。 字节是用Java签名的,因此,如果您想将字节处理为0到255而不是-128到127,并且将每个字节与0xFF相对。 这会将字节提升为整数,并且将是0到255之间的值。
看到有关如何通过串行端口发送此消息的注释,字节数组没有任何问题。 接收方(如果是另一个Java程序)将必须通过将字节与0xFF进行“与”运算来处理这些字节。 另一个串行程序(例如,在C#中)将接收字节(0x00-0xFF)
public static void main(String[] args) throws Exception {
byte[] bytearray = {0x02, 0x08, 0x16, 0x00, 0x00, 0x33, (byte)0xC6, 0x1B};
for (byte b : bytearray) {
System.out.printf("%d ", b);
}
System.out.println();
for (byte b : bytearray) {
System.out.printf("%d ", b & 0xFF);
}
}
输出:
2 8 22 0 0 51 -58 27
2 8 22 0 0 51 198 27
public static void main(String[] args) throws Exception {
System.out.println(Byte.MIN_VALUE);
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE & 0xFF);
System.out.println((byte)-1 & 0xFF);
System.out.println((byte)-10 & 0xFF);
System.out.println((byte)-58 & 0xFF);
}
输出:
-128
127
128
255
246
198
这是正确的,因为字节是在Java中签名的。 如果您需要在0-255之间而不是-128到127之间,则需要使用short或int(我想是long)。
话虽如此,您仍然可以通过该格式发送它,但是当您使用它时,您将需要将它用作int。 否则,您将永远得到负数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.