这个声明在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}); 

现在想上面的语句工作???

+2

为什么你不试试看,找出来?当然,这比尝试这种测验方法更好。如果它不起作用,*然后*回来问我们为什么。 – paxdiablo 2009-04-16 11:36:40

它可能没有,COS的字节最大值为127及以后,它会自动改用负-64为192,-88 168等等...

的Java字节签署(愚蠢的,我知道)如此大于127是不可能的。

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

+0

你能告诉我如何修改该声明,以便通知。可以做成? – arshad 2009-04-16 11:42:34

+1

不要打扰那个链接;该片段属于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"