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'.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...