int aus Byte-Array erzeugen

Status
Nicht offen für weitere Antworten.

hugo

Bekanntes Mitglied
Ich habe eine int-Zahl in einem Byte-Array gespeichert. Aus diesen Bytes möchte ich jetzt den int wieder zusammensetzen. Derzeit mache ich das wie folgt:
Code:
byte[] Header = new byte[4];
// Header wird vor dem nächsten Befehl mit der Zahl 31635 gefüllt
int Serie = (Header[3] << 24) + (Header[2] << 16) + (Header[1] << 8) + (Header[0]);
Kommt auch eine halbwegs vernünftige Zahl raus, bloß dass das letzte Bit des dritten Bytes falsch ist.
So wird aus ehemals 31635 --> 31379. Woran liegt das?
 

The_S

Top Contributor
Wie hast du den int auf die byte-Array aufgeteilt? Hast du 123 in 1 2 3 geteilt oder z. B. in 100 20 3?
 

hugo

Bekanntes Mitglied
Ein int ist ja eine 4 Byte Zahl und diese 4 Bytes habe ich auf das Array verteilt.

Code:
int SerienNrInt = 31635;          
Integer neuerInt = new Integer(SerienNrInt >> 24);
Header[3] = neuerInt.byteValue();
neuerInt = new Integer(SerienNrInt >> 16);
Header[2] = neuerInt.byteValue();
neuerInt = new Integer(SerienNrInt >> 8);
Header[1] = neuerInt.byteValue();
neuerInt = new Integer(SerienNrInt);
Header[0] = neuerInt.byteValue();
 

hugo

Bekanntes Mitglied
Also eins habe ich noch herausbekommen, wenn das oberste Bit des letzten Byte "1" ist, wird das unterse Bit des 3. Byte getauscht. Wenn das oberste Bit des letzten Byte "0" ist, wird die richtige Zahl übertragen.
 

hugo

Bekanntes Mitglied
Du hast mit deinem Vorschlag sicherlich recht, bloß war das nur zur Veranschaulichung. Ich lese die Bytes aus einem Datenstrom in das Feld ein, also die Bytes an sich sollten richtig bei mir ankommen.
 

hugo

Bekanntes Mitglied
So habe jetzt eine Lösung zu dem Problem:
Code:
int Eins = (int)(Header[3] & 0xFF) * 16777216;
int Zwei = (int)(Header[2] & 0xFF) * 65536;
int Drei = (int)(Header[1] & 0xFF) * 256;
int Vier = (int)(Header[0] & 0xFF);
int Serie = Eins + Zwei + Drei + Vier;

Falls jemand eine elegantere oder ressourcenschonendere Variante kennt immer her damit.

hugo
 
K

Kampfturtle

Gast
Code:
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
.
.
.
int erg = ((ByteBuffer.wrap(b)).order(ByteOrder.LITTLE_ENDIAN)).getInt();

bestimmt nicht ressourcenschonender aber man kann durch ByteOrder mal schnell auf ein anderes System anpassen. Weiterhin kann man aus einem ByteBuffer mit .getShort(), .getDouble() etc. aus einem ByteArray (sollte natürlich eine sinnvolle länge haben und richtig initialiisert worden sein) ein Short, Double .. etc. machen.

http://java.sun.com/j2se/1.4.2/docs/api/java/nio/ByteBuffer.html
 

sisko78

Bekanntes Mitglied
Code:
int SerienNrInt = 31635;         
Integer neuerInt = new Integer(SerienNrInt >> 24);
Header[3] = neuerInt.byteValue();
neuerInt = new Integer(SerienNrInt >> 16);
Header[2] = neuerInt.byteValue();
neuerInt = new Integer(SerienNrInt >> 8);
Header[1] = neuerInt.byteValue();
neuerInt = new Integer(SerienNrInt);
Header[0] = neuerInt.byteValue();

irgendwas hab ich da nicht ganz verstanden:

Das erste byte ist voller 0en
Das zweite auch
Das 3. enthält die höherwertigen 8 bits des Integers
nd das 4. enthält die komplette bitrepräsentation des integers

wenn ich die addiere ist doch klar, dass da einmal die 255 der ersten 8 bits mehr rauskommt oder wo ist mein Denkfehler?
Edit: ach wird ja weniger, jetzt blick ichs gar nicht mehr
nochmal edit: post einfach ignorieren, habs nochmal angeschaut, ist klar :)
 

messi

Bekanntes Mitglied
hugo hat gesagt.:
So habe jetzt eine Lösung zu dem Problem:
Code:
int Eins = (int)(Header[3] & 0xFF) * 16777216;
int Zwei = (int)(Header[2] & 0xFF) * 65536;
int Drei = (int)(Header[1] & 0xFF) * 256;
int Vier = (int)(Header[0] & 0xFF);
int Serie = Eins + Zwei + Drei + Vier;

Falls jemand eine elegantere oder ressourcenschonendere Variante kennt immer her damit.

hugo
Code:
int Serie = (int)Header[3];
Serie <<= 8;
Serie |= (int)Header[2] & 0xFF;
Serie <<= 8;
Serie |= (int)Header[1] & 0xFF;
Serie <<= 8;
Serie |= (int)Header[0] & 0xFF;
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Byte Array aus Datei erzeugen Allgemeine Java-Themen 6
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
N Byte Array in Java "dekomprimieren" Allgemeine Java-Themen 3
R Byte Array Zeichensuche Allgemeine Java-Themen 6
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
O Byte-Array zu String Allgemeine Java-Themen 7
E Byte-Array to String: Zeichenkaputt Allgemeine Java-Themen 11
R In einem Byte-Array nach einer gewissen Zahlenfolge suchen Allgemeine Java-Themen 7
A Input/Output Buffered Image zu Byte Array und zurück konvertieren Allgemeine Java-Themen 4
M byte array splitten Allgemeine Java-Themen 3
W CRC32 aus byte array Allgemeine Java-Themen 5
P Einzelne Bits in einem Byte-Array setzen Allgemeine Java-Themen 2
R int to byte[] Array Allgemeine Java-Themen 4
MQue byte[] Array to Integer Allgemeine Java-Themen 4
G String in byte- Array Allgemeine Java-Themen 3
ARadauer Blob aus byte Array erstellen? Allgemeine Java-Themen 3
D datei in byte[]-array schreiben Allgemeine Java-Themen 6
MQue ArrayList in ein byte- Array Allgemeine Java-Themen 7
B ein spezielles Byte-Array sortieren Allgemeine Java-Themen 11
J byte-Array in Hashmap speichern? Allgemeine Java-Themen 3
J byte-Array als String übers http schicken Allgemeine Java-Themen 8
B boolean array = byte array (platzverbrauch) Allgemeine Java-Themen 6
T BufferedImage aus einem byte-Array? Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
Thallius unsigned byte Allgemeine Java-Themen 18
kodela Datentypen byte als unsigned interpretieren Allgemeine Java-Themen 23
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
TheWhiteShadow 2D-Grafik GIF Library mit byte output Allgemeine Java-Themen 10
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
kodela Byte Order Mark (BOM) bei readLine() ignorieren Allgemeine Java-Themen 5
A Byte zu String Allgemeine Java-Themen 4
RalleYTN Datentypen Unsignierter Byte zum signierten Byte Allgemeine Java-Themen 2
X Datentypen Byte geht nicht höher als 126 auch nicht mit casten? Allgemeine Java-Themen 22
M Null byte in verschiedenen charsets Allgemeine Java-Themen 2
D Decodierung von Mp3-byte[] Allgemeine Java-Themen 4
A ByteBuffer.get(byte[] dst,int offset,int length) Allgemeine Java-Themen 2
A RandomAccessFile.read(byte[] b) Allgemeine Java-Themen 9
P Datentypen Warum überhaupt Byte ? Allgemeine Java-Themen 12
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
E Byte zu String & umgekehrt Allgemeine Java-Themen 3
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
M Chart per byte[] in JSP anzeigen Allgemeine Java-Themen 4
E int in byte Allgemeine Java-Themen 6
R ArrayList byte[] abspeichern Allgemeine Java-Themen 4
S byte [] in string und zurück konvertieren Allgemeine Java-Themen 2
G byte ? : Allgemeine Java-Themen 7
hdi Speicherbelegung byte, short, int Allgemeine Java-Themen 8
J byte - hex - byte.. casten Allgemeine Java-Themen 8
R byte[] to String Konvertieren Allgemeine Java-Themen 14
J Hex-String zu byte transformieren Allgemeine Java-Themen 7
T Zu doof für byte-Umrechnung ... Allgemeine Java-Themen 3
F byte[] aus einem BufferedImage Allgemeine Java-Themen 3
L byte -> byte[1] -> byte Allgemeine Java-Themen 2
Kr0e Synchronisieren: boolean,byte,char ? Allgemeine Java-Themen 2
S Überprüfung/Parsen eines Byte-Arrays Allgemeine Java-Themen 9
Semox Byte-Manipulation eines Bildes Allgemeine Java-Themen 7
Meldanor For-Schleifen - byte statt int? Allgemeine Java-Themen 11
C int zu byte cast - verständnis Allgemeine Java-Themen 3
MQue Byte to Int convertieren Allgemeine Java-Themen 2
R Double Werte aus byte[] auslesen Allgemeine Java-Themen 5
W Verwendung von byte Allgemeine Java-Themen 9
G zu lange Byte code dateien Allgemeine Java-Themen 6
E Byte [] nach hex, dann nach dec Allgemeine Java-Themen 2
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
G 2 x byte zusammenkopieren Allgemeine Java-Themen 7
G byte nach int Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
G Byte- List mit einem Iterator durchlaufen Allgemeine Java-Themen 5
W Konflikt byte->int, in.read->arraycopy Allgemeine Java-Themen 7
T "unsigned" byte[] -> BigInteger Allgemeine Java-Themen 2
F byte in hex-String oder: Wer hat in Mathe aufgepasst Allgemeine Java-Themen 3
T Socket Server Anwendung - Empfang eines Byte-Arrays Allgemeine Java-Themen 7
J NumberFormatException bei String->byte[] Allgemeine Java-Themen 12
T Object -> byte[] Allgemeine Java-Themen 5
G Byte[] zeichenweise lesen Allgemeine Java-Themen 4
G byte[] mit Strings füllen Allgemeine Java-Themen 2
B int -> byte Allgemeine Java-Themen 2
G file --> byte[] Allgemeine Java-Themen 7
E Problem beim Dateien kodieren ("Byte = Byte +1") Allgemeine Java-Themen 3
I String -> byte[] -> String Allgemeine Java-Themen 2
D byte nach integer? Allgemeine Java-Themen 4
MQue int in byte Allgemeine Java-Themen 18
G Maximalgröße von byte[] buffer Allgemeine Java-Themen 7
E String -> byte[] Allgemeine Java-Themen 6
C Byte[] to String Allgemeine Java-Themen 7
D byte[] problem Allgemeine Java-Themen 3
T OutputStream - Event bei Byte-Fluss Allgemeine Java-Themen 5
S Problem beim Einlesen von byte-werten aus datei Allgemeine Java-Themen 2
F List<String> zu byte[] Allgemeine Java-Themen 7
L byte vs. int Allgemeine Java-Themen 6
G Umwandlung Byte in Integer Allgemeine Java-Themen 12
N Byte-Code entschlüsseln (Bitmasks?) Allgemeine Java-Themen 3
R byte - string? Allgemeine Java-Themen 10
R Stream Byte für Byte durchgehen Allgemeine Java-Themen 5
S java.io.InputStream.read(byte[] b) überschreiben Allgemeine Java-Themen 33
L byte[] to int Allgemeine Java-Themen 2
M Vector zu einem byte[] Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben