[英]Converting a string of hexadecimal valiues into an array of bytes using Scanner in Java
我想将形式为“ 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
BB
和CC
)超出了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]
显示溢出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.