这个声明在java中是否正确?
我想这样做使用数据报socket.Iam使用以下行这样两台电脑之间的数据传输:这个声明在java中是否正确?
host=InetAddress.getByAddress("mypc",new byte[]{192,168,1,110});
但是当我使用上面的语句,我得到这个错误:“可能的精度损失”
所以我投了int值的字节是这样的:
InetAddress.getByAddress("mypc",new byte[]{(byte)192,(byte)168,(byte)1,(byte)110});
现在想上面的语句工作???
它可能没有,COS的字节最大值为127及以后,它会自动改用负-64为192,-88 168等等...
的Java字节签署(愚蠢的,我知道)如此大于127是不可能的。
请参阅alnitaks对更完整(以及后续:)答案的回复。
你能告诉我如何修改该声明,以便通知。可以做成? – arshad 2009-04-16 11:42:34
不要打扰那个链接;该片段属于http://thedailywtf.com/。请参阅@ Alnitak的答案,即如何将字节视为未签名。 – 2009-04-17 00:07:41
如果你已经拥有了它在一个字符串,只需使用getByName()
:
InetAddress host = InetAddress.getByName("192.168.1.110");
使用字节是混乱和可能的危险(由于在Java中使用签署byts)。如果可以的话,坚持使用String
。
将正整数文字转换为byte
值即使溢出也没有问题。
InetAddress.getByAddress()
函数很好地处理了超过127的值将转换为负数的事实。
您需要注意的唯一事情是将带符号字节转换回整数,如果您随后想要显示它们。这工作正常:
byte b = (byte)192;
System.out.println(b); // outputs "-64"
int i = (b & 0xff);
System.out.println(i); // outputs "192"
为什么你不试试看,找出来?当然,这比尝试这种测验方法更好。如果它不起作用,*然后*回来问我们为什么。 – paxdiablo 2009-04-16 11:36:40