繁体   English   中英

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

[英]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 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]

显示溢出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM