ERLEDIGT
JA
JA
ANTWORTEN
1
1
ZUGRIFFE
685
685
EMPFEHLEN
-
Hallo,
ich habe folgenden Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
import java.io.*; import java.net.*; class DNSAnfrage { public static void main(String[] args) { PrintWriter out = new PrintWriter(System.out, true); if (args.length != 1) out.println("java DNSAnfrage <hostname>"); else try { InetAddress ip = InetAddress.getByName(args[0]); out.println("Daten fuer '" + args[0] + "':"); out.println(" toString: " + ip); out.println(" getHostName: " + ip.getHostName()); out.println(" getHostAddress: " + ip.getHostAddress()); byte[] b = ip.getAddress(); out.print(" getAddress: "); for (int i = 0; i < b.length; ++i) out.print(" " + (b[i] & 0xFF)); // keine negativen Werte ausgeben out.println("\n\nAlle Adressen fuer '" + args[0] + "':"); InetAddress[] ips = InetAddress.getAllByName(args[0]); for (int i = 0; i < ips.length; ++i) out.println(" Die " + (i + 1) + ". IP-Adresse von " + args[0] + " ist: " + ips[i].getHostAddress()); } catch (UnknownHostException x) { // Thrown to indicate that the IP address of a host could not be determined. x.printStackTrace(); } } }
Ich verstehe die Zeile
for (int i = 0; i < b.length; ++i)out.print(" " + (b[i] & 0xFF)); // keine negativen Werte ausgeben nicht.
Ich habe gesehen, dass man alternativ folgenden Code verwenden könnte:
for (int i = 0; i < b.length; ++i)
int unsignedByte=b[i];
if (unsignedByte<0) unsignedByte=b[i]+256;
Kann mir jemand erklären, was das Addieren von 256 generell soll und wie die (elegantere) Variante mit dem &0xff funktioniert?
Danke im Voraus.
PETER
-
Eigendlich sollte die elegante Version nicht gehen

das doch geht ist Trick 17...
Byte ist in java ein Wertebereich von -128 bis 127
ein Byte sind ja 8 bit und das oberste Bit ist das Vorzeichen
wenn also das JavaByte ein Negativwert hat ist das bit 8 auf eins und eigendlich ein wert
über 128
darum wird bei einem negativen Wert 256 auf addiert um das Vorzeichen rauszuwerfen
Trick 17:
wenn wir im Byte sowas haben
10000000 ist das in Java -128 und in C +128
Java macht bei b[i] & 0xFF erst ein Cast von Byte auf Integer
darum wird das Vorzeichen ausgedehnt aus hex 80 Byte wird Integer hex FF80
wenn wir nun ein logisches und drüberbügeln von FF drüberbügeln kommt wider ein hex
80 raus diesmal ohne das minus da es ja Integer ist
mit andren Worten hier wird ein wenig getrickst
Ähnliche Themen
-
byte Array in Datei speichern und wieder in byte Array einlesen
Von riseX im Forum JavaAntworten: 5Letzter Beitrag: 22.02.10, 12:05 -
Zip und unzip von byte-Array
Von Szdnez im Forum JavaAntworten: 2Letzter Beitrag: 08.09.09, 09:24 -
byte [] - Array reseten
Von bladich im Forum JavaAntworten: 3Letzter Beitrag: 24.11.06, 15:58 -
Wandeln von BYTE nach BOOL
Von salma im Forum .NET ArchivAntworten: 1Letzter Beitrag: 21.01.05, 15:51 -
Werte übergeben und String in Integer wandeln
Von aneril im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 12.06.03, 14:51





Zitieren
Login





