我正在制作一个需要通过互联网接收数据的程序。它是使用DatagramSockets和接收DatagramPackets这样做的。这一切都很好,它收到的字节数组就是我所期望的那个。
然而,当我尝试将字节数组转换为字符串,然后转换为整数时,会发生非常奇怪的事情。
运行下面的代码会在parseInt
行上显示NumberFormatException:
String length = new String(data, 1, data.length-1);
System.out.println("length = "+length);
size = Integer.parseInt(length);
System.out.println("size = "+size);
然而,当我检查data
的内容时,我发现它只包含55,52,49,56,53,0,0,0,0,0,0,0,0,0,0,0,0
,这很好,它是字符串“74185”。这引发了异常。
当我将“74185”硬编码为length
字符串时,一切都运行良好。
这里可能出现什么问题?
答案 0 :(得分:5)
您的字符串包含嵌入的\0
个字符。在Java中,它们是字符串的一部分,而不是C。
所以你首先需要在字符串中找到\0
的第一个匹配项,然后将子字符串放到该位置。
答案 1 :(得分:-1)
失败是因为您使用的构造函数错误。这是String(byte\[\],index,length)
。第一个参数data
是正确的。第二个应该是0
(数组的开头是0),第三个应该是data.length
您只需使用new String(data)
即可使用整个数组。
编辑:正如Roland Illig所指出的那样,你的数组包含\0
个字符,这会破坏你的号码。您应该在调用之前删除那些\0
,或者检查第一个\0
的索引并将其用作上述构造函数+1的第三个参数。
无论如何,如果你想发送一个号码,为什么不发送一个号码而不是你必须解析的字符串呢?