gpt4 book ai didi

java - 使用 Java 中的 Scanner 将十六进制值字符串转换为字节数组

转载 作者:行者123 更新时间:2023-12-02 11:42:47 26 4
gpt4 key购买 nike

我想将“AA BB CC”或“0xAA 0xBB 0xCC”形式的字符串转换为字节数组。阅读 Scanner 的文档看起来很有希望。

我认为 hasNextByte()getNextByte() 可以完成这项工作,但实际上似乎没有检测到字节。代码非常简单:

byte[] bytesFromString(String value) {

List<Byte> list = new ArrayList<>();
Scanner scan = new Scanner(value);
while(scan.hasNextByte(16)) {
list.add(scan.nextByte(16));
}

byte[] bytes = new byte[list.size()];
for(int i = 0; i < list.size(); i++){
bytes[i] = list.get(i);
}
return bytes;
}

我总是收到一个空数组作为输出:hasNextByte(16) 从未检测到该字节。

有什么特殊原因导致它不起作用吗?

最佳答案

问题是您的值(AA BBCC)超出了 byte 的范围,因为 byte 已签名。

一种可能的解决方法是将值读取为 short,然后转换为 byte:

while (scan.hasNextShort(16)) {
list.add((byte) scan.nextShort(16));
}

打印结果,你会看到数值是负数:

String input = "AA BB CC";
byte[] result = bytesFromString(input);
System.out.println(Arrays.toString(result)); // [-86, -69, -52]

显示溢出。

关于java - 使用 Java 中的 Scanner 将十六进制值字符串转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48426307/

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