我的代码中有一个小错误,我一生都无法弄清楚。
我有一个字符串数组,它们是二进制数据的表示(从十六进制转换后),例如:
一个索引是 1011,另一个索引是 11100。我遍历数组并用 0 填充每个索引,以便每个索引都是八个字节。当我尝试将这些表示形式转换为实际字节时,当我尝试解析“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);
}
问题不就是这里吗byte
是有符号类型,因此它的有效值为-128...127?如果你把它解析为int
(Using Integer.parseInt()
),它应该可以工作。
顺便说一句,您也不必用零填充数字。
将二进制字符串解析为 int 后,您可以将其转换为字节,但该值仍将被视为有符号,因此binary 11111111
会变成int 255
首先,然后byte -1
演员阵容后。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)