我想使用数据报套接字在两台计算机之间进行数据传输。我这样使用以下行:
host=InetAddress.getByAddress("mypc",new byte[]{192,168,1,110});
但是当我使用上面的语句时,我得到了这个错误:“可能会丢失精度”
所以我用这种方式将int转换为字节:
InetAddress.getByAddress("mypc",new byte[]{(byte)192,(byte)168,(byte)1,(byte)110});
上述陈述现在会起作用吗?
答案 0 :(得分:14)
如果您已将其包含在字符串中,只需使用getByName()
:
InetAddress host = InetAddress.getByName("192.168.1.110");
使用字节是混乱的,并且可能很危险(由于Java中使用的签名字节)。如果可以,请坚持使用String
。
答案 1 :(得分: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"
答案 2 :(得分:2)
java字节被签名(愚蠢,我知道),因此不可能超过127。
请参阅alnitaks对更完整(以及稍后:)答案的回应。
答案 3 :(得分:1)
它可能不是,因为一个字节的最大值是127,超过它将翻转到负-64为192,-88为168等等......