4-stelliges-Byte-Array in Integer umwandeln geht das?

Status
Nicht offen für weitere Antworten.
Gibt es die Möglichkeit ein Array aus 4-Byte in ein integer umzuwandeln ?
Code:
byte[] b = new byte[4];

b[0] =100;
b[1] =120;
b[3]=97;
b[4]=38;

...//aus b ein integer??
 
B

Beni

Gast
Es gibt die Möglichkeit Bitoperatoren zu benutzen:

Code:
byte[] b = new byte[4];

    b[0] = 100;
    b[1] = 120;
    b[2] = 97;
    b[3] = 38;

    int result = 0;
    int temp = 0;

    for( int i = 0; i < b.length; i++ ){
      temp = b[ b.length - 1 - i ];
      if ( temp < 0 ){        // Das Vorzeichen belegt ja auch ein Bit
        temp = -temp;
        temp += 1 << 7;   // Belegt das 1. Bit
      }
      temp <<= i * 8;   // gleichbedeutend mit    temp = temp * 2^(i * 8)
      result += temp;
    }

Vielleicht lohnt es sich, noch von Hand nachzurechnen :wink:

Ich gehe davon aus, dass das 1. Bit gesetzt = negatives Vorzeichen bedeutet.
Gebe keine Garantie, dass das überall so ist.

mfg Beni
 
Bitweise betrachten um mit dem FileReader richtige Integer-Werte aus einer Datei auszulesen
So gehts besser :
Code:
byte[] b = new byte[4]; 

    b[0] = 100; 
    b[1] = 120; 
    b[2] = 97; 
    b[3] = 38;

int f = b[0];f=f<<24;
int g = b[1];g=g<<16;
int h = b[2];h=h<<8;
int i = b[3];

int k = f|=g|=h|=i;    //k = Wert
:D
 
B

Beni

Gast
Also, vielleicht bin ich zu blöd ums zu kapieren:

mal angenommen,

b[0] = 0 = 00 00 00 00
b[1] = 0 = 00 00 00 00
b[2] = -2 = 10 00 00 10
b[3] = -4 = 10 00 01 00

Meine Variante:

Integer, unterteilt in Bytes, die der Algo liefert:
00 00 00 00 / 00 00 00 00 / 10 00 00 10 / 10 00 01 00

theoretisch : = 33412
praktisch : = 33412

Deine Variante:

Integer, unterteilt in Bytes, die der Algo liefert:
10 00 00 00 / 00 00 00 00 / 00 00 00 10 / 00 00 01 00

theoretisch : = -516
praktisch : = -4


Die theoretischen kommen von meinem Überlegungen in Bits.
Die praktischen vom JBuilder, in dem ich beide Codes ausprobiert habe.

Wie man sieht: überhaupt nicht dasselbe :cry:

Aber welches der beiden Ergebnisse betrachtest Du nun als richtig?
Ich plädiere für das erste (weil's von mir kommt :wink: )

Beni

P.S. der Filereader liefert doch Integer, wobei nur die hintersten 8 Bits benutzt werden? Wäre es nicht einfacher, direkt mit diesen Integern weiterzuarbeiten?

P.P.S. java.io.DataInputStream: hat bereits eine solche Umrechnung: readInt(), aber die funktioniert auch mit Integers, und nicht mit Bytes.
 
B

Beni

Gast
Für positive Bytes bekommen beide dasselbe. Aber wenn die Bytes zuerst von einem Integer in 4 Bytes zerlegt wurden, und nun wird das Ganze wieder rückgängig gemacht, dann vermute ich mal, dass die Beispielzahlen oben durchaus auftreten können.

mfg Beni
 
Sorry aber habe mich im code vertan :
Code:
                RandomAccessFile file = new RandomAccessFile("E:\\irgendwas.lpg","rw");
	file.seek(0);file.writeInt(-512);
	int[] b = new int[4];

	file.seek(0);b[0]=file.read();
	file.seek(1);b[1]=file.read();
	file.seek(2);b[2]=file.read();
	file.seek(3);b[3]=file.read();

                                
                                int f = b[0];f=f<<24;
		int g = b[1];g=g<<16;
		int h = b[2];h=h<<8;
		int i = b[3];

int k = f|=g|=h|=i;    //k = Wert

bei mir ist k = -512

Der FileReader liefert zwar ein Integer (aber im grundegenommen ist dies nur ein Byte);

In z.B. dem Header einer .bmp oder .wav datei sind 4 nacheinanderfolgende Bytes zu einem Integer zusammengefasst- da z.B.die Bildbreite oder die Bildhöhe einen hohen Integerwert annehmen können.
Diesen Integerwert kann ich aber mit der methode readInt() der RandomAccessFile nicht direkt lesen
da die Bytes komischer weise in der datei verdreht sind. Also
Integer in Java : Byte3--Byte2--Byte1--Byte0
Integer in der Datei: Byte0--Byte1--Byte2--Byte3.
Um diesen Auszulesen muß ich die einzelnen Bytes drehen.
Du kannst es ja mal versuchen in dem du die Breite eines Bildes aus einer .bmp datei mit der readInt()-methode
zu lesen versuchst.


Code:
RandomAccessFile file = new RandomAccessFile("c:\\xxx.bmp","r");

file.seek(18);
int BreiteDesBildes=file.readInt();
 
B

Beni

Gast
Gregor.Schulz hat gesagt.:
Der FileReader liefert zwar ein Integer (aber im grundegenommen ist dies nur ein Byte)
Und das ist der Unterschied.
Zwar ist es tatsächlich nur ein Byte, aber da es als Integer gespeichert ist, verhält es sich bei den Bitoperationen leicht anders.

Was die Verdrehung angeht: das Problem hat mir auch schon ein Knüppel zwischen die Beine geworfen. :wink:

Dein letztes Codeschnippsel funktioniert auch bei mir richtig :arrow: Problem gelöst :D

Ich denke mal, damit ist das Thema erledigt 8)

Gruss Beni :D
 
B

Beni

Gast
Keine Ahnung.
Wenn ich das file.seek(0);file.writeInt( -512 ); nehme, funktioniert es nicht.
Dafür funktionieren sowohl deine 1. als auch meine Lösung nicht, wenn ich 33412 ins File schreibe (die letzte schon)

Überhaupt: -512 wird in den int-Array { 255, 255, 254, 0 } aufgeteilt, ich hätte da eher was wie {-0, 0, 0, 512 } erwartet.
Meine Lösung ist halt leider nicht die Umkehrfunktion des Speicheralgo's :cry:

Wenigstens hast Du jetzt eine Lösung, und erst noch selbst gefunden. :wink:
mfg Beni
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L 4 stelliges Passwort aus bestimmten Zeichen. Java Basics - Anfänger-Themen 27
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
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
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
S Byte-Array kann chars speichern? Java Basics - Anfänger-Themen 3
N Datentypen Image zu Byte-Array Java Basics - Anfänger-Themen 4
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
D Methoden int to byte array und zurück? Java Basics - Anfänger-Themen 5
P int zu byte Java Basics - Anfänger-Themen 8
F Byte Array wachsen lassen Java Basics - Anfänger-Themen 5
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
F Teil eines Byte Array an eine Methode übergeben Java Basics - Anfänger-Themen 5
S byte to float Java Basics - Anfänger-Themen 4
J Byte Folge erkennen Java Basics - Anfänger-Themen 5
M sehr großes Byte Array Java Basics - Anfänger-Themen 3
M Byte Array und Co. Java Basics - Anfänger-Themen 12
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
F Hexfolge in Byte Array ersetzen Java Basics - Anfänger-Themen 8
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 32bit Zählwert als Byte-Array Java Basics - Anfänger-Themen 9
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
M byte Array Mindestlänge Java Basics - Anfänger-Themen 19
U short[] nach byte[] Java Basics - Anfänger-Themen 11
D [jni] jbytearray <-> byte array Java Basics - Anfänger-Themen 8
S Datentypen Ändern eines byte[] Arrays Java Basics - Anfänger-Themen 4
B byte-weise Verschlüsselung Java Basics - Anfänger-Themen 6
P byte Array aus ImageIcon Java Basics - Anfänger-Themen 10
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
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
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
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
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
M Byte Array: Werte größer 127? Java Basics - Anfänger-Themen 11
S Addition zweier 32 Byte langer ByteArrays Java Basics - Anfänger-Themen 5
H 1 Byte Status Variable Java Basics - Anfänger-Themen 3
P Datentypen Byte und char Typecast Java Basics - Anfänger-Themen 2
M Bit/Byte Operationen Java Java Basics - Anfänger-Themen 8
W Datentypen int -> byte Java Basics - Anfänger-Themen 2
H Datentypen Byte-Array aus Stream lesen Java Basics - Anfänger-Themen 3
F Typenumwandlung byte <=> int verstehen Java Basics - Anfänger-Themen 3
S Byte eines arrays Java Basics - Anfänger-Themen 17
N Frage zu Datentyp byte Java Basics - Anfänger-Themen 14
B unsigned byte Problem Java Basics - Anfänger-Themen 9
S 2 Byte Arrays addieren Java Basics - Anfänger-Themen 45
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
H Frage zu Byte-Streams Java Basics - Anfänger-Themen 2
Z Wie Byte[] in einen String oder int konvertieren Java Basics - Anfänger-Themen 2
0 byte[] -> hex Java Basics - Anfänger-Themen 2
G char[] in byte[] konvertieren? Java Basics - Anfänger-Themen 2
V Byte Arrays in Strings umwandeln und splitten Java Basics - Anfänger-Themen 2
M unsigned byte Java Basics - Anfänger-Themen 4
F Byte 0 und 1 einzelnd zuweisen? Java Basics - Anfänger-Themen 17
G byte [] aus uRL erhalten Java Basics - Anfänger-Themen 11
J Byte-Array als Hex-Datei speichern? Java Basics - Anfänger-Themen 9
G Hex to Byte Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben