3

我想使用数据报套接字在两台计算机之间进行数据传输。我以这种方式使用以下行:

host=InetAddress.getByAddress("mypc",new byte[]{192,168,1,110});

但是当我使用上述语句时,我得到了这个错误:“可能失去精度”

所以我以这种方式将 int 转换为字节:

InetAddress.getByAddress("mypc",new byte[]{(byte)192,(byte)168,(byte)1,(byte)110});

上面的声明现在有效吗???

4

4 回答 4

14

如果您已经将它放在字符串中,只需使用getByName()

InetAddress host = InetAddress.getByName("192.168.1.110");

使用字节是杂乱无章的,并且可能很危险(由于 Java 中使用了带符号的字节)。String如果可以,请坚持使用s。

于 2009-04-16T11:41:37.673 回答
6

将正整数文字转换为值没有问题byte,即使它们溢出。

InetAddress.getByAddress()函数完美地处理了超过 127 的值将被转换为负数的事实。

唯一需要注意的是将带符号的字节转换回整数,如果您随后想要显示它们。这工作正常:

byte b = (byte)192;
System.out.println(b); // outputs "-64"

int i = (b & 0xff);
System.out.println(i); // outputs "192"
于 2009-04-16T12:24:57.677 回答
2

java字节是有符号的(愚蠢的,我知道)所以不可能大于127。

请参阅 alnitaks 的回复以获得更完整(以及以后:) 的答案。

于 2009-04-16T11:40:43.057 回答
1

它可能不会,因为一个字节的最大值是 127 和超过它会翻转到负 -64 192,-88 168 等等......

于 2009-04-16T11:39:36.103 回答