Zum Inhalt springen

Frage zu Integer.toHexString


Empfohlene Beiträge

Geschrieben

Hallo,

ich hoffe hier ist jemand der bei mir ein wenig Licht ins Dunkle bringen kann.

Ich habe hier ein Byte Array mit 3 Einträgen:

byte[] byteArr = new byte[] { 13, 65, -1 };
Die 3 Zahlen sollen so in eine Text-Datei gespeichert werden, die dann von einem C++ Programm ausgelesen werden. Meine erste Idee war folgende:

        for (int i = 0; i < arr.length; ++i) {

            String tmp = Integer.toString(arr[i]);

            fileout.write(tmp);

            fileout.write('\n');

        }

Mein Kollege meinte dann zu mir, dass dies nicht gut wäre, da die 13 unter Windows auch als Zeilenumbruch gewertet werden könnte. Er machte mir dann folgenden Vorschlag:

        for (int i = 0; i < arr.length; ++i) {

            String tmp = Integer.toHexString(arr[i] & 0xff);

            fw.write("0x" + tmp);

        }

Die einzelnen Bytes als Hex-Werte darzustellen wäre die bessere Methode. Soweit, so gut. Was ich aber überhaupt nicht verstehe ist, warum bei
String tmp = Integer.toHexString(arr[i] & 0xff);

dieses 0xff notwendig ist.

Meine Recherche hat bislang ergeben, dass es etwas mit dem Vorzeichen zu tun hat. Allerdings stehe ich heute irgendwie aufm Schlauch.

Kann mir da jemand was zu sagen?

Geschrieben

Servus,

beim einfachen "&" wird hier binär verundet. Das heißt, die zwei Werte, also Dein byte-Wert im Array und 0xff werden bit für bit verglichen. Steht bei beiden Werten eine 1, dann ist das Ergebnis auch eine 1. ff ist Hexadezimal für 255, das heißt, es setzt beim Verunden alle 1-bits im Array-Wert auf 1, die restlichen bleiben auf 0. Da Du ja mit Integer.toHexString arbeitest, könnte es evtl. sein, das hier eine Umwandlung des byte-Werts in ein int stattfindet (keine Ahnung, musst mal in die Doku schauen). Evtl. vorhandene Werte in diesem int werden durch das Verunden mit 0xff zu 0 im Ergebnis, da alles über ein byte beim Vergleichswert eine 0 hat und damit das Ergebnis auch eine 0.

Mal Dir am besten ein kleines Beispiel, dann wird das deutlich.

Peter

Geschrieben

Mein Kollege meinte dann zu mir, dass dies nicht gut wäre, da die 13 unter Windows auch als Zeilenumbruch gewertet werden könnte.

Aber nicht, wenn du es als String schreibst. Theoretisch nur als Escapesequenz.

'n' ist ja auch nicht '\n'.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...