daTom Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 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? Zitieren
kingofbrain Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 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 Zitieren
TDM Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 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'. Zitieren
Empfohlene Beiträge
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.