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?
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
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'.
Empfohlene Beiträge
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 erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden