我正在尝试创建一个已知一定位数的新字节
char prostie1 = theRepChars[j-3];
char prostie2 = theRepChars[j-2];
char prostie3 = theRepChars[j-1];
char prostie4 = theRepChars[j];
String prostiaMare = prostie4 + prostie3 + prostie2 + prostie1 + "";
Byte theChar = new Byte(prostiaMare);当我这样做的时候,我得到了一个NumberFormatException值196。
我不知道我的问题出在哪里
-编辑--
好吧,我想我可能需要给出更多的细节,因为我不是很清楚。我正在尝试做一个Uuencode算法,通过遵循算法的逻辑,我应该阻止我的字节具有大于194的值。下面是我的一些代码。
if(my_chars.length % 3 == 0)
{
for(int x = 0; x < my_chars.length; x++)
{
if((x+1) % 3 == 0)
{
char first = my_chars[x-2];
char second = my_chars[x-1];
char third = my_chars[x];
int n = (((first << 8) | second) << 8) | third;
String theRep = Integer.toBinaryString(n);
while(theRep.length() < 24 - 1)
{
theRep = 0 + theRep;
}
//0 padded theRep
for(int j = 0; j < theRepChars.length; j++)
{
if((j+1) % 4 == 0)
{
char prostie1 = theRepChars[j-3];
char prostie2 = theRepChars[j-2];
char prostie3 = theRepChars[j-1];
char prostie4 = theRepChars[j];
String prostiaMare = prostie4 + prostie3 + prostie2 + prostie1 + "";
System.out.println(prostiaMare);
}
}
}
}
}然后尝试用prostiaMare的值创建一个新的字节,它给了我numberFormatException。我不确定我是否没有遵循正确的算法( http://www.herongyang.com/encoding/UUEncode-Algorithm.html )
发布于 2013-07-14 00:58:35
196不在有符号值byte的范围内。字节的范围从-128到127。
我不知道你为什么要转换成字符串。如果您只想要一个字节,其位等于四个字符的总和,则直接转换为byte:
(byte) (prostie4 + prostie3 + prostie2 + prostie1)如果您打算从这四个字符构造一个字符串,那么您当前并没有这样做。使用:
"" + prostie4 + prostie3 + prostie2 + prostie1而且,如果结果在一个字节的范围内,您可以像以前一样创建一个字节。
发布于 2013-07-14 00:54:40
字节在Java中是有符号的。这意味着8位长的byte的最小值为-2^7 (-128),最大值为2^7 -1 (127)。除了char (无符号的,16位)之外,Java没有无符号的原语类型。
因此196是无法解析的--> NumberFormatException。
除了读取更大的类型并执行& 0xff来获取字节之外,您没有太多需要解决的问题:
final int i = Integer.parseInt(theString);
final byte b = (byte) (i & 0xff);或者帮你自己一个忙,使用芭乐,它有UnsignedBytes
final byte b = UnsignedBytes.parseUnsignedByte(theString);但是看起来您无论如何都想要进行比较;所以只需使用比byte更大的类型。不,这不会浪费内存:不要忘记对齐。
发布于 2013-07-14 00:42:32
正如在docs中提到的
如果发生以下情况之一,则会引发NumberFormatException类型的异常:
字节长度第一个参数是字节或长度为Character.MAX_RADIX.
null Character.MIN_RADIX 在您的情况下,这是自196以来的最后一种情况,不能表示为byte..The有效范围是-128到127
https://stackoverflow.com/questions/17632111
复制相似问题