0

我正在制作一个需要通过互联网接收数据的程序。它使用 DatagramSockets 并接收 DatagramPackets 这样做。这一切都很好,它接收到的字节数组正是我所期望的。

但是,当我尝试将字节数组转换为字符串,然后再转换为整数时,会发生非常奇怪的事情。

运行下面的代码会在该行给出 NumberFormatException parseInt

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字符串时,一切正常。

这里可能出了什么问题?

4

2 回答 2

5

您的字符串包含嵌入的\0字符。在 Java 中,它们是字符串的一部分,而不是在 C 中。

因此,您首先需要\0在字符串中找到第一次出现的 ,然后将子字符串带到该位置。

于 2013-11-03T22:58:25.387 回答
-1

它失败了,因为您使用了错误的构造函数。是String(byte\[\],index,length)。第一个参数data是正确的。第二个应该是0(数组的开头是 0),第三个应该是data.length

您可以new String(data)改为使用整个数组。

编辑:正如 Roland Illig 指出的那样,您的数组包含\0破坏您的号码的字符。您应该在调用之前摆脱那些\0s,或者检查 first 的索引\0并将其用作上述构造函数 +1 的第三个参数。

无论如何,如果您想发送一个数字,为​​什么不发送一个数字而不是您必须解析的字符串?

于 2013-11-03T22:55:14.100 回答