Java Byte.parseByte()错误
我的代码中有一个小错误,我一辈子都弄不清楚 我有一个字符串数组,表示二进制数据(从十六进制转换后),例如: 一个指数是1011,另一个指数是11100。我遍历数组,用0填充每个索引,使每个索引为8个字节。当我尝试将这些表示转换为实际字节时,当我尝试解析“11111111”时,我得到一个错误,错误是: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
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亿。