gpt4 book ai didi

java - 使用java将较大值的十六进制字符串转换为字节

转载 作者:行者123 更新时间:2023-12-02 04:34:43 25 4
gpt4 key购买 nike

我正在尝试将较大的十六进制字符串值转换为字节。关于转换有符号字节得到的信息是最大值是0x7F仅等于127。但现在我想将十六进制值 C6 转换为字节,我应该收到 198。有什么方法可以做到这一点吗?

目前我已经使用以下方法测试了我的代码:

  1. static byte[] bytearray = {0x02, 0x08, 0x16, 0x00, 0x00, 0x33, (byte)(Integer.parseInt("C6",16) & 0xff), 0x1B};
  2. 静态字节[]字节数组 = {0x02, 0x08, 0x16, 0x00, 0x00, 0x33, (字节)0xC6, 0x1B};

所有这些方法都只给我相同的值 -58。

如果有人能帮助我解决这个问题,我将不胜感激。谢谢

最佳答案

使用方法 2,不必担心字节数组中的负值。字节在java中是有符号的,所以如果你想将字节处理为0到255而不是-128到127,并且每个字节对应0xFF。这会将字节提升为整数,并且是 0 - 255 之间的值。

更新

看到有关如何通过串行端口发送此数据的评论,您的字节数组没有任何问题。接收方(如果是另一个 Java 程序)必须通过将字节与 0xFF 进行 AND 运算来处理字节。另一个串行程序(例如 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 - 使用java将较大值的十六进制字符串转换为字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30992544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com