Java Byte.parseByte()错误

Java Byte.parseByte()错误,java,parsing,byte,numberformatexception,Java,Parsing,Byte,Numberformatexception,我的代码中有一个小错误,我一辈子都弄不清楚 我有一个字符串数组,表示二进制数据(从十六进制转换后),例如: 一个指数是1011,另一个指数是11100。我遍历数组,用0填充每个索引,使每个索引为8个字节。当我尝试将这些表示转换为实际字节时,当我尝试解析“11111111”时,我得到一个错误,错误是: java.lang.NumberFormatException: Value out of range. Value:"11111111" Radix:2 以下是一个片段: String sour

我的代码中有一个小错误,我一辈子都弄不清楚

我有一个字符串数组,表示二进制数据(从十六进制转换后),例如: 一个指数是1011,另一个指数是11100。我遍历数组,用0填充每个索引,使每个索引为8个字节。当我尝试将这些表示转换为实际字节时,当我尝试解析“11111111”时,我得到一个错误,错误是:

java.lang.NumberFormatException: Value out of range. Value:"11111111" Radix:2
以下是一个片段:

String source = a.get("image block");
int val;
byte imageData[] = new byte[source.length()/2];

try {
    f.createNewFile();
    FileOutputStream output = new FileOutputStream(f);
    for (int i=0; i<source.length(); i+=2) {
        val = Integer.parseInt(source.substring(i, i+2), 16);
        String temp = Integer.toBinaryString(val);
        while (temp.length() != 8) {
            temp = "0" + temp;
        }
    imageData[i/2] = Byte.parseByte(temp, 2);
}
stringsource=a.get(“图像块”);
int-val;
字节imageData[]=新字节[source.length()/2];
试一试{
f、 createNewFile();
FileOutputStream输出=新的FileOutputStream(f);

对于(int i=0;i这里的问题不在于
byte
是有符号类型,因此其有效值为-128…127?如果将其解析为
int
(使用
Integer.parseInt()
),它应该可以工作

顺便说一下,你也不必用零填充数字


一旦你将二进制字符串解析成int,你可以将它转换成一个字节,但值仍然会被视为有符号,因此
binary 11111111
将首先变成
int 255
,然后在转换后变成
byte-1

八个一的值是255,根据java.lang.byte,最大值是2^7-1或正127

因此,您的代码将失败,因为您的数字太大。第一位保留用于正负号


根据

字节
只允许在-128到127范围内的数字。我将使用一个
int
来代替,它保存在-21亿到21亿范围内的数字。

字节
只允许在-128到127范围内的数字。我将使用一个
int
来代替,它保存在-2.1范围内的数字亿到21亿。