int in byte umwandeln

Status
Nicht offen für weitere Antworten.

Nathy

Aktives Mitglied
Ich habe jetzt schon mehrere Beispielprogramm getestet, die einen int-Wert in byte umwandeln sollen.
Hier ein Beispiel
Code:
    public static void berechnung() {
        int foo = 1000;
        byte[] mybyte = new byte[4];
        mybyte[0] =(byte)( foo >> 24 );
        mybyte[1] =(byte)( (foo << 8) >> 24 );
        mybyte[2] =(byte)( (foo << 16) >> 24 );
        mybyte[3] =(byte)( (foo << 24) >> 24 );
        System.out.println(mybyte[0]);
        System.out.println(mybyte[1]);
        System.out.println(mybyte[2]);
        System.out.println(mybyte[3]);
    }
Leider ergibt die Ausgabe immer
0
0
3
-24

Warum gibt es eine negative Zahl? Mache ich etwas mit der Ausgabe falsch?

Gruss und danke
 
S

SlaterB

Gast
mit String.toBinaryString()
kannst du dir die ints in bit-Darstellung anschauen,
mach das mal für foo,
für foo << 8, dann das wieder >> 24 usw

das Problem ist, wenn ich richtig rate, dass beim letzten durch das << das Negationsbit auf -1 gesetzt
und beim >> beibehalten wird
 

Ark

Top Contributor
Noch umständlicher ging's nicht, oder? :autsch:
Code:
    public static void berechnung() {
        int foo = 1000;
        byte[] mybyte = new byte[4];
        mybyte[0] =(byte)(foo >> 24);
        mybyte[1] =(byte)(foo >> 16);
        mybyte[2] =(byte)(foo >> 8);
        mybyte[3] =(byte)(foo);
        System.out.println(mybyte[0] & 0xFF);
        System.out.println(mybyte[1] & 0xFF);
        System.out.println(mybyte[2] & 0xFF);
        System.out.println(mybyte[3] & 0xFF);
    }
Das "& 0xFF" ist notwendig, um aus dem Zweierkomplement eine vorzeichenlose Zahl zu machen.

Ark
 

Marco13

Top Contributor
@Ark: Deins ist mindestens genauso umständlich, und in gewisser Hinsicht nichtmal das, was gewünscht ist: Durch das anfängliche shiften nach links sollte genau das erreicht werden, was du (allerdings NUR bei der Ausgabe durch das & 0xFF erreichst. Dass dabei implizit nach int gecastet wird, ändert nichts daran, dass das Ergebnis (mybyte[3]) "falsch" ist.

"Falsch" ist es aber garnicht: byte hat einen Wertebereich von -128 bis 127. Und in jedem byte werden 8 bits gespeichert. Es kann also einfach sein, dass die Zahlen, die da rauskommen, negativ sind. Die "richtige" Zahl (232) kann einfach als byte nicht dargestellt werden...


Man kann sich ja mal die 4 bytes ausgeben lassen:
Code:
class Berechnung
{
    public static void main(String args[])
    {
        berechnung();
    }

     public static void berechnung() {
        int foo = 1000;
        byte[] mybyte = new byte[4];

        System.out.println(bin(foo));

        mybyte[0] =(byte)( foo >> 24 );
        mybyte[1] =(byte)( (foo << 8) >> 24 );
        mybyte[2] =(byte)( (foo << 16) >> 24 );
        mybyte[3] =(byte)( (foo << 24) >> 24 );
        System.out.println(mybyte[0]);
        System.out.println(mybyte[1]);
        System.out.println(mybyte[2]);
        System.out.println(mybyte[3]);
    }

    public static String bin(int n)
    {
		String result = "";
		for (int i=31; i>=0; i--)
		{
			if ((n & (1<<i)) == 0)
			{
				result+="0";
			}
			else
			{
				result +="1";
			}
			if (i%8==0) result+=" ";
		}
		return result;
	}
}

Und das letzte byte ist einfach -24. Falls die Frage "Warum?" noch zu klären ist:
http://de.wikipedia.org/wiki/Zweierkomplement


EDIT: Nachtrag @Nathy: Du kannst die bytes auch als chars speichern. Der läßt sowieso nur positive Zahlen zu. Wenn du später aber die bytes weiterverarbeiten willst (z.B. in eine Datei schreiben o.ä. solltest du dich mit der negativen zal abfinden :wink: )
 

Nathy

Aktives Mitglied
Danke für die Antwort.
Jetzt habe ich an Stelle von byte, int eingesetzt. Dies gibt aber genau dieselbe Ausgabe? Wieso das?
int kann ja mehr als 128 speichern.
Code:
    public static void berechnung() {
        int foo = 1000;
        
        int[] mybyte = new int[4];
        mybyte[0] =(int)( foo >> 24 );
        mybyte[1] =(int)( (foo << 8) >> 24 );
        mybyte[2] =(int)( (foo << 16) >> 24 );
        mybyte[3] =(int)( (foo << 24) >> 24 );
        System.out.println(mybyte[0]);
        System.out.println(mybyte[1]);
        System.out.println(mybyte[2]);
        System.out.println(mybyte[3]);
    }
 

Ark

Top Contributor
Der >>-Operator kopiert das Vorzeichen (d. h., es bleibt erhalten). Außerdem verstehe ich immer noch nicht, warum du deine Zahlen hin- und herschiebst, obwohl einmal Schieben mit UND-Verknüpfung es auch getan hätte, zumal bei einer gut durchdachten UND-Verknüpfung das Vorzeichen automatisch rausfällt. ???:L

Beschäftige dich mal näher mit dem Zweierkomplement und Binärarithmetik überhaupt.

Ark
 

Nathy

Aktives Mitglied
Hallo

Habe das Problem gelöst:

[/code]
int foo = 1000;

int[] mybyte = new int[4];
mybyte[0] =(int)( foo >>> 24 );
mybyte[1] =(int)( (foo << 8) >>> 24 );
mybyte[2] =(int)( (foo << 16) >>> 24 );
mybyte[3] =(int)( (foo << 24) >>> 24 );
System.out.println(mybyte[0]);
System.out.println(mybyte[1]);
System.out.println(mybyte[2]);
System.out.println(mybyte[3]);
Code:
Gruss und danke für die Hilfe
 

Leroy42

Top Contributor
Bin ich hier im falschen Forum? :shock:

Ich hab bei google doch gar nicht
Bit-Schubser-Fetischisten eingegeben.

Versteh' ich nicht! ???:L
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
V String in Byte umwandeln Java Basics - Anfänger-Themen 11
T Operatoren Float in byte umwandeln Java Basics - Anfänger-Themen 3
S ArrayList<Byte> in String umwandeln Java Basics - Anfänger-Themen 5
S Input/Output String in byte umwandeln? Java Basics - Anfänger-Themen 5
F Byte nach Zahl umwandeln Java Basics - Anfänger-Themen 11
N Datentypen Fehler beim Umwandeln in byte Java Basics - Anfänger-Themen 3
V Byte Arrays in Strings umwandeln und splitten Java Basics - Anfänger-Themen 2
S Byte in Zahl umwandeln Java Basics - Anfänger-Themen 3
M Double-Wert in Byte[] umwandeln Java Basics - Anfänger-Themen 7
S Image in byte[] umwandeln? Java Basics - Anfänger-Themen 2
D Byte-Array zu Hex-String umwandeln Java Basics - Anfänger-Themen 3
C Hex-String ind einen byte[] umwandeln? Java Basics - Anfänger-Themen 6
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
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
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
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
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
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
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
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
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

Ähnliche Java Themen

Neue Themen


Oben