2009-04-16 13 views
3

Ich möchte eine Datenübertragung zwischen zwei Computern auf diese Weise mit der folgenden Zeile mit Datagramms socket.Iam tun:Ist diese Aussage in Java korrekt?

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

, aber wenn ich die obige Aussage i diesen Fehler verwenden: „Möglicher Verlust an Präzision“

Also warf ich die int Bytes auf diese Weise:

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

würde der oben jetzt Aussage Arbeit ???

+2

Warum versuchst du es nicht und findest es heraus? Sicherlich ist das besser, als diesen Quizansatz zu versuchen. Wenn es nicht funktioniert, * dann * komm zurück und frag uns warum. – paxdiablo

Antwort

1

Es ist vielleicht nicht, cos der maximale Wert für ein Byte 127 und darüber hinaus, dass es mit dem negativen -64 192, -88 168 und so weiter ...

2

java Bytes unterzeichnet Rollover würde (dumm, ich weiß) so größer als 127 ist nicht möglich.

Siehe Antwort von alnitaks für eine vollständigere (und später :) Antwort.

+0

kannst du mir bitte sagen, wie ich diese aussage so ändern kann, dass das commn. kann gemacht werden ? – arshad

+1

Ärgere dich nicht mit diesem Link; dieser Ausschnitt gehört auf http://thedailywtf.com/. In der Antwort von @ Alnitak erfahren Sie, wie Sie Bytes so behandeln, als wären sie nicht signiert. –

14

Wenn Sie bereits in einem string haben, verwenden Sie einfach getByName():

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

Mit Bytes überladen ist und möglicherweise gefährlich (aufgrund unterzeichnet Byts in Java verwendet wird). Bleiben Sie mit String s wenn Sie können.

+0

Ja, das funktioniert, aber es beantwortet nicht die eigentliche Frage. – Alnitak

6

Es gibt kein Problem, die positiven Ganzzahlliterale in byte Werte zu werfen, selbst wenn sie überlaufen.

Die Funktion InetAddress.getByAddress() erfüllt die Tatsache, dass Werte über 127 in negative Zahlen umgewandelt werden, sehr gut.

Die einzige Sache, auf die Sie achten müssen, besteht darin, die vorzeichenbehafteten Bytes wieder in Ganzzahlen umzuwandeln, wenn Sie sie später anzeigen möchten. Das funktioniert gut:

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

int i = (b & 0xff); 
System.out.println(i); // outputs "192" 
Verwandte Themen