Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Frage zu Integer.toHexString

Empfohlene Antworten

Veröffentlicht

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?

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.