2009-04-16 45 views
3

我想這樣做使用數據報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

回答

1

它可能沒有,COS的字節最大值爲127及以後,它會自動改用負-64爲192,-88 168等等...

2

的Java字節簽署(愚蠢的,我知道)如此大於127是不可能的。

請參閱alnitaks對更完整(以及後續:)答案的回覆。

+0

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

+1

不要打擾那個鏈接;該片段屬於http://thedailywtf.com/。請參閱@ Alnitak的答案,即如何將字節視爲未簽名。 – 2009-04-17 00:07:41

14

如果你已經擁有了它在一個字符串,只需使用getByName()

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

使用字節是混亂和可能的危險(由於在Java中使用簽署byts)。如果可以的話,堅持使用String

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"