Variablen 32bit Zählwert als Byte-Array

hasso

Mitglied
Hallo,

ich benötige einen 32bit Zählwert als Byte-Array und mir fehlt im Moment irgendwie jeglicher Ansatz.
Ich kann mir entweder direkt das Array erstellen:

Java:
byte[] zw = new byte[]{(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00};

Nur wie zähle ich da denn jetzt hoch ? Das ist ja mit einem mehr oder minder großen Aufwand verbunden wenn ich jedes Byte händisch erhöhe und Überläufe prüfen muss..

Andererseits kann ich einfach einen Integer nehmen, der hat ja 32bit, da ist das Hochzählen kein Problem. Nur wie kriege ich einen Integer in ein 4-byte Array ?

Gibt es da eine einfach Möglichkeit oder muss ich das händisch ausprogrammieren ?

Viele Grüße
 
Hallo um kein neues Thema zu erstellen frage ich mal kurz hier nach Hilfe.

Mein code:
Java:
import java.nio.ByteBuffer;

public class Befehle {
	public static void main(String[] args) {
		ByteBuffer b = ByteBuffer.allocate(3);
		b.putInt(15);
		// byte[] result = b.array();
		System.out.println(b);
	}
}

Console:
Exception in thread "main" java.nio.BufferOverflowException
at java.nio.Buffer.nextPutIndex(Unknown Source)
at java.nio.HeapByteBuffer.putInt(Unknown Source)
at Befehle.main(Befehle.java:6)

wieso klappt das nicht?
 
Ein int belegt 4 byte. Du hast den Buffer nur mit 3 byte alloziert. Deswegen die Exception.

Nun funktioniert es. Aber ich verstehe es nicht? Die zahl 2 ist doch ein Int und die kann ich doch mit 3 bytes abspeichern?

Und eigentlich brauche ich nur 2 Bytes... Und deshalb habe ich es mit putShort versucht, aber das ging auch nicht...
 
Zuletzt bearbeitet:
Ok ich weiß nun was du meinst.

Java:
import java.nio.ByteBuffer;

public class Befehle {
	public static void main(String[] args) {
		ByteBuffer b = ByteBuffer.allocate(2);
		b.putShort(10);
		byte[] result = b.array();
		System.out.println(result);
	}
}

aber wieso funktioniert das nicht?

console: Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method putShort(short) in the type ByteBuffer is not applicable for the arguments (int)

at Befehle.main(Befehle.java:6)
 
Ok ich weiß nun was du meinst.

Java:
import java.nio.ByteBuffer;

public class Befehle {
	public static void main(String[] args) {
		ByteBuffer b = ByteBuffer.allocate(2);
		b.putShort(10);
		byte[] result = b.array();
		System.out.println(result);
	}
}

aber wieso funktioniert das nicht?

console: Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method putShort(short) in the type ByteBuffer is not applicable for the arguments (int)

at Befehle.main(Befehle.java:6)

hat sich nun alles erledigt, trotzdem nochmal dankeschön!
 
Auch, wenn es sich erledigt hat, der Vollständigkeit halber die Antworten. Nur für den (unwahrscheinlichen) Fall, dass jemand die Forensuche benutzt :lol:

Die zahl 2 ist doch ein Int und die kann ich doch mit 3 bytes abspeichern?
Eine Variable vom Typ int belegt in Java immer 4 bytes. Auch, wenn man die Zahl 2 in einem byte abspeichern könnte, werden 4 bytes belegt. Es wäre ja immerhin denkbar, dass man der Variable irgendwann einmal eine größere Zahl zuweist.
[JAVA=6]b.putShort(10);[/code]
The method putShort(short) in the type ByteBuffer is not applicable for the arguments (int)
Ganze Zahlen Java-Code sind immer vom Typ int. Wenn man das nicht will, muss man entweder vorher eine Variable des gewünschten Typs deklarieren und initialisieren, oder den Parameter explizit casten:
Java:
b.putShort((short)10);
 
Eine Variable vom Typ int belegt in Java immer 4 bytes. Auch, wenn man die Zahl 2 in einem byte abspeichern könnte, werden 4 bytes belegt. Es wäre ja immerhin denkbar, dass man der Variable irgendwann einmal eine größere Zahl zuweist.
Wenn dem nicht so wäre wären warscheinlich auch byte, short, int und long zu einem einzigen Datentypen zusammengefasst 😀
 

Zurück
Oben