Byte Array und Co.

may24

Bekanntes Mitglied
Hi zusammen
Ich lese binär aus einem Daten File in ein Byte Array. Jetzt versuche ich diverse Stellen zu filtern, indem ich ein anderes Bytearray erzeuge und das Ganze Bitweise "UND" verknüpfe.
Beispiel:
Java:
byte[] datenVonDatei = ...
byte[] filter = new byte[] filter{0xFF,0x00,0x5A};
byte[] output = new byte[3];

datenVonDatei[0] & filter[0] = output[0]
datenVonDatei[1] & filter[1] = output[1]
datenVonDatei[2] & filter[2] = output[2]

...
Nun habe ich da zwei "Probleme".
Erstens beim initialisieren des filter Arrays mit den Hex Werten - und ich will hier Hex Werte eintragen und nicht irgend was anderes - mault Eclipse bei Wert 1 und 3 rum und sagt das er int nicht nach Byte convertieren will. Bei 0x00 hat er keine Probleme.
Wieso int ? :bahnhof: Das sind ganz klar Bytes ...

Angenommen "datenVonDatei " wäre nur 3 Bytes lang, könnte ich dann auch folgendes machen ?
Java:
datenVonDatei & 0xFF005A = output
 

ARadauer

Top Contributor
FF ist mehr als ein byte ;-) java ist so schlau...

mhn wusste ich auch nicht...

byte b1 = 0xFF; //geht nicht
byte b2 = 0x1F; // geht
 
Zuletzt bearbeitet:

DrZoidberg

Top Contributor
Bytes in Java haben einen Wert zwischen -128 und +127 bzw -0x80 und +0x7F.

Du könntest dir eine Methode schreiben, die ein int Array in ein byte Array umwandelt.
Java:
public static byte[] ints2bytes(int... ints) {
    byte[] bytes = new byte[ints.length];
    for(int i = 0; i < ints.length; i++) bytes[i] = (byte)(ints[i] & 0xFF);
    return bytes;
}
...
byte[] filter = ints2bytes(0xFF,0x00,0x5A);
 

may24

Bekanntes Mitglied
Nein, das ist nicht Sinn der Sache. Ich brauche ein Byte Array das Bytes von 0x00 bis 0xFF speichert - unsigned. Und ich hatte immer angenommen das Byte-Arrays genau das machen. Andernfalls wäre es doch ein (short) int.

Wie steht's mitr meiner zweiten Frage. Geht das ?
 

DrZoidberg

Top Contributor
Das hier geht
Java:
0xFF005A & datenVonDatei[0]<<16 & datenVonDatei[1]<<8 & datenVonDatei[2]

Wofür brauchst du das Ganze denn? Du kannst ein int Array nehmen und die ganzen Bytes da drin speichern. Oder halt ein byte Array. Dass byte in Java signed ist, spielt doch keine Rolle. Du kannst da trotzdem Werte grösser als 0x7F reinschreiben.
 

may24

Bekanntes Mitglied
Das hier geht


Wofür brauchst du das Ganze denn? Du kannst ein int Array nehmen und die ganzen Bytes da drin speichern. Oder halt ein byte Array. Dass byte in Java signed ist, spielt doch keine Rolle. Du kannst da trotzdem Werte grösser als 0x7F reinschreiben.

Ich lese raw-data aus einer Datei. D.h. es kommt auf den "echten Hexwert" an der da steht und nicht was er im dezimalen Zahlensystem bedeutet. Die Bit-Reihenfolge ist für mich ausschlaggebend, weswegen ich ja auch bit-Filter verwende.

Java:
0xFF005A & datenVonDatei[0]<<16 & datenVonDatei[1]<<8 & datenVonDatei[2]

...äh, für was sind die "schiebe nach links" Anweisunge ? Warscheinlich nur zum rechnen wegen lsb und msb... oder ?
Oder "vermurkst" Java sonst die Werte ? (wegen signed Zahlentyp)
 

DrZoidberg

Top Contributor
Wie schon gesagt, es spielt keine Rolle ob die Bytes signed oder unsigned sind. Die Bit Reihenfolge bleibt gleich.
Lies deine Datei in ein byte Array ein, benutze die ints2bytes Methode, die ich vor ein paar Tagen gepostet habe, um deinen Filter zu erzeugen, wende den Filter auf die Bytes an und schreib das Array wieder in eine Datei. Das funktioniert einwandfrei.

Der << Operator verschiebt alle Bits nach links und füllt rechts mit Nullen auf.
z.B. 0xFF << 8 ist gleich 0xFF00.
 

may24

Bekanntes Mitglied
Ok, ich wiederbelebe nochmal kurz meinen Thread ;)

Warum funktioniert das nicht und es kommt immer "false" raus :bahnhof: ?

Java:
byte a = 0xFF;
byte b = 0xFF;

if( (a & b) == 0xFF )
{
   return true;
}
else
{
   return false;
}
 

DrZoidberg

Top Contributor
Das Problem ist die automatische Umwandlung zwischen byte und int.

(a & b) == 0xFF
ist gleich
((int)a&(int)b) == 0x000000FF
und das ist dann
(0xFFFFFFFF & 0xFFFFFFFF) == 0x000000FF

Du könntest statt dessen das hier schreiben
(a & b)&0xFF == 0xFF
 

may24

Bekanntes Mitglied
Wieso eigentlich "automatische Umwandlung" ? Sowohl a als auch b wurden doch explizit als bytes ge-casted.
... ich gehe mal davon aus das man die nicht abschalten bzw. unterbinden kann ...?

Gäbe es stat "==" noch 'ne Alternative ? Oder würde char das Problem lösen ? (kann ich mir aber kaum vorstellen ...)
 

DrZoidberg

Top Contributor
Char wird auch automatisch nach int gecastet. Das kann man nicht abschalten. Aber da char unsigned ist, sollte es damit funktionieren.
Allerdings ist es unüblich für sowas char zu nehmen. Ich würde einfach für alle Werte int verwenden und erst beim Schreiben in das byte Array dann nach byte casten. Oder alternativ, wie schon erwähnt, bei jedem Vergleich ein &0xFF einfügen.
 

may24

Bekanntes Mitglied
Ah, es gibt noch eine Möglichkeit :)

Das hier funktioniert:
Java:
...
if( (a & b) == (byte) 0xFF)
...

... mei ist das umständlich :autsch:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
G ImageIcon in Byte-Array ablegen Java Basics - Anfänger-Themen 7
S Byte-Array kann chars speichern? Java Basics - Anfänger-Themen 3
N Datentypen Image zu Byte-Array Java Basics - Anfänger-Themen 4
D Methoden int to byte array und zurück? Java Basics - Anfänger-Themen 5
F Byte Array wachsen lassen Java Basics - Anfänger-Themen 5
F Teil eines Byte Array an eine Methode übergeben Java Basics - Anfänger-Themen 5
M sehr großes Byte Array Java Basics - Anfänger-Themen 3
F Hexfolge in Byte Array ersetzen Java Basics - Anfänger-Themen 8
H Variablen 32bit Zählwert als Byte-Array Java Basics - Anfänger-Themen 9
M byte Array Mindestlänge Java Basics - Anfänger-Themen 19
D [jni] jbytearray <-> byte array Java Basics - Anfänger-Themen 8
P byte Array aus ImageIcon Java Basics - Anfänger-Themen 10
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
H Datentypen Byte-Array RSA Java Basics - Anfänger-Themen 9
H Datentypen Rechnen mit signed Byte-Array - unsinged byte Java Basics - Anfänger-Themen 3
M Byte Array: Werte größer 127? Java Basics - Anfänger-Themen 11
H Datentypen Byte-Array aus Stream lesen Java Basics - Anfänger-Themen 3
S Unbekannte Daten einlesen, speichern und in einem byte Array speichern Java Basics - Anfänger-Themen 3
S Alle Datentypen in byte Array und zurückwandeln Java Basics - Anfänger-Themen 2
J Byte-Array als Hex-Datei speichern? Java Basics - Anfänger-Themen 9
J String array to byte array Java Basics - Anfänger-Themen 8
G SHA (byte array) per modulo hashen Java Basics - Anfänger-Themen 6
K Byte-Array als Zeichenfolge ausgeben Java Basics - Anfänger-Themen 3
G byte array in integer konvertieren Java Basics - Anfänger-Themen 15
mwildam Byte array oder String Java Basics - Anfänger-Themen 4
P InputStream in Byte-Array speichern Java Basics - Anfänger-Themen 2
U byte array in datei 'dumpen' / speichern Java Basics - Anfänger-Themen 2
G Byte Array inkrementieren Java Basics - Anfänger-Themen 17
H String in Byte Array wandeln Java Basics - Anfänger-Themen 25
H von und in byte array wandeln Java Basics - Anfänger-Themen 8
D Byte-Array zu Hex-String umwandeln Java Basics - Anfänger-Themen 3
G Konvertierung Byte Array Java Basics - Anfänger-Themen 4
tobiasbeil Von Datei byte für byte lesen und in ein Array einfügen. Java Basics - Anfänger-Themen 11
G Byte-Array Infos speichern Java Basics - Anfänger-Themen 14
F char to byte array Java Basics - Anfänger-Themen 8
S byte-array bitweise auslesen Java Basics - Anfänger-Themen 14
G Char oder Byte Array mit unbekannter länge erstellen? Java Basics - Anfänger-Themen 1
T XML Parsen und Inhalt in ein Byte Array schreiben Java Basics - Anfänger-Themen 3
C Byte-Array mit Dateiinhalt füllen Java Basics - Anfänger-Themen 7
G 4-stelliges-Byte-Array in Integer umwandeln geht das? Java Basics - Anfänger-Themen 10
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
I Dateigröße von einem InputStream oder byte[] bekommen Java Basics - Anfänger-Themen 2
D Best Practice Parameter int vs byte Java Basics - Anfänger-Themen 16
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
M Datentypen Byte, Float und Boolean Java Basics - Anfänger-Themen 13
F byte, short oder doch int? Java Basics - Anfänger-Themen 6
S Performance von byte[], short[], int[]..? Java Basics - Anfänger-Themen 24
P int zu byte Java Basics - Anfänger-Themen 8
M Java Klasse Byte Java Basics - Anfänger-Themen 10
F Byte Ausgabe plötzlich falsch Java Basics - Anfänger-Themen 0
V String in Byte umwandeln Java Basics - Anfänger-Themen 11
O Input/Output Ein (negatives) Byte über PrintWriter hinausschreiben Java Basics - Anfänger-Themen 3
T byte[] zu String mit Sonderzeichen Java Basics - Anfänger-Themen 2
W Nullpointer bei Objekt Serialisierung mit ArrayList<byte[]> etc. Java Basics - Anfänger-Themen 2
J byte - Ausgabe Java Basics - Anfänger-Themen 2
S byte to float Java Basics - Anfänger-Themen 4
J Byte Folge erkennen Java Basics - Anfänger-Themen 5
T Operatoren Float in byte umwandeln Java Basics - Anfänger-Themen 3
Y File to byte[] and byte[] to sysout Java Basics - Anfänger-Themen 3
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
P String in byte konvertieren, wie? Java Basics - Anfänger-Themen 4
T Erste Schritte Byte Java Basics - Anfänger-Themen 3
R byte[] zu String und Ausgabe Java Basics - Anfänger-Themen 2
H Variablen short <-> byte[] Java Basics - Anfänger-Themen 15
X Datentypen String in byte[] Java Basics - Anfänger-Themen 29
H Variablen string nach byte Java Basics - Anfänger-Themen 12
B Frage zur Effizienz von read und read(byte[]) Java Basics - Anfänger-Themen 23
R Erste Schritte Rechnenoperationen mit byte, short und char Java Basics - Anfänger-Themen 8
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
L Byte[] to String, doch bits sind gespiegelt (MSB/LSB) Java Basics - Anfänger-Themen 3
S Von byte[] nach String zurueck nach byte[]. Arrays sind nicht identisch :( Java Basics - Anfänger-Themen 6
S ArrayList<Byte> in String umwandeln Java Basics - Anfänger-Themen 5
V unsigned byte? Java Basics - Anfänger-Themen 27
U short[] nach byte[] Java Basics - Anfänger-Themen 11
S Datentypen Ändern eines byte[] Arrays Java Basics - Anfänger-Themen 4
B byte-weise Verschlüsselung Java Basics - Anfänger-Themen 6
S Input/Output String in byte umwandeln? Java Basics - Anfänger-Themen 5
F von Byte zu 2 Stellig Hex Java Basics - Anfänger-Themen 3
G byte[] (Base64) korrekt übergeben Java Basics - Anfänger-Themen 4
O 64bit- OS byte, short, int oder long bzw. float oder double? Java Basics - Anfänger-Themen 13
G Binär in Byte speichern Java Basics - Anfänger-Themen 7
T Datentypen byte -Division..mal gehts mit cast mal ohne Java Basics - Anfänger-Themen 5
T Datentypen default ist int, cast zu byte nötig... Java Basics - Anfänger-Themen 2
F Byte nach Zahl umwandeln Java Basics - Anfänger-Themen 11
E Datentypen type cast problem (int, byte,) Java Basics - Anfänger-Themen 5
T Datentypen unsigned byte? Java Basics - Anfänger-Themen 9
G Integar zu Byte Java Basics - Anfänger-Themen 4
P Byte mit 0...255? Java Basics - Anfänger-Themen 5
N Datentypen Fehler beim Umwandeln in byte Java Basics - Anfänger-Themen 3
L Umwandlung int <--> byte Java Basics - Anfänger-Themen 2
L Datentypen 250 und byte? Java Basics - Anfänger-Themen 4
L Datentypen byte[] in String und wieder zurück Java Basics - Anfänger-Themen 3
N Files mit Byte an Socket versenden Java Basics - Anfänger-Themen 2
V Byte -> String -> Byte verlustfrei Java Basics - Anfänger-Themen 12
Hindi93 Byte to Int Java Basics - Anfänger-Themen 4
H Datentypen byte[] to int Java Basics - Anfänger-Themen 9
S hex zu byte Java Basics - Anfänger-Themen 4
S Addition zweier 32 Byte langer ByteArrays Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben