16-Bit int --> 2* 8-Bit Bytes

Status
Nicht offen für weitere Antworten.

Dit

Bekanntes Mitglied
Hallo zusammen,

ich habe die aufgabe bekommen einen int in einen byte umzuwandeln.
d.h. einen int mit 16 Bit in einen "2 * 8 bit großem byte --> 2 byte)

wenn ich das richtig sehe genügen 2 byte aus um die Positiven stellen eines int zu speichern
(2 byte --> 65536)
habe auch schon lang gesucht und keine Hilfe gefunden.

hier sind zwar ansätze aber noch lange keine Lösungen:

http://groups.google.de/group/comp....int+in+2+bytes&rnum=32&hl=de#327f80dab2dd07f6

ein andere Ansatz:

Code:
int zahl = ??; 

byte[] array = new byte[4]; 
array[0] = (zahl >>> 24) & 0xFF; 
array[1] = (zahl >>> 16) & 0xFF; 
array[2] = (zahl >>> 8) & 0xFF; 
array[3] = zahl & 0xFF;

aber das ist wiederrum ein byte Array... :? und aucn nicht das was ich suche!

ich hoffe mir kann einer helfen... :D
 

0xdeadbeef

Top Contributor
Hi, hast die Lösung doch im Prinzip schon ???:L

Code:
int number = ??;
...

byte low = (byte)number;
byte high = (byte)(number >> 8);

Das Maskieren mit 0xff ist in diese Richtung (Int - Byte) eigentlich Unsinn, weil in ein Byte ja eh nur 8bit passen, also werden die anderen Bits automatisch abgeschnitten. Das "& 0xff" kostet also nur unnötig Laufzeit und Codegröße.

Ach so: und ein Int ist natürlich vorzeichenbehaftet und geht von -32768 bis +32767 (nicht bis 65535). Die Schieberei mit ">>>" (ohne Vorzeichenerweiterung) statt mit ">>" (mit Vorzeichenwerweiterung) im obigen Beispiel ist zwar nicht falsch, aber ebenfalls völlig wirkungslos, weil die davon betroffenen Bits ja gleich wieder abgeschnitten werden (sogar doppelt durch das unnötige "& 0xff").
 

Dit

Bekanntes Mitglied
naja also ich bin da noch nicht so ganz von überzeugt, dass das die Lösung sein soll:

Code:
public class Typumwandlung {
	public static void main(String[] args) {
		int number = 255; 
		byte low = (byte)number; 
		byte high = (byte)(number >> 8); 
		System.out.println("low  :  " + low);
		System.out.println("high :  " + high);
	}

}

Ausgabe:
low : -1
high : 0

und genau das versteh ich nicht! warum 0 und -1 ?? :?
 

kama

Top Contributor
Hi,

warum da "-1" rauskommt ist ganz klar, da byte ein Vorzeichenbehafteter Integer mit 8 Bit ist. Somit -128 ... +127.

Code:
	   public static void main(String[] args) {
	      int number = 255;
	      
	      
	      char low = (char)(number & 0x00ff);
	      char high = (char)((number & 0xff00) >> 8);
	      System.out.println("Size=" + Character.SIZE);
	      System.out.println("low  :  " + (int)low);
	      System.out.println("high :  " + (int)high);
	   }

So gibt das schon eher was.
Byte ist in Java leider kein 8-Bit (unsigned). ;-(
BTW: auch noch mal lesen. Java ist eine Insel.

MfG
Karl Heinz Marbaise
 

Dit

Bekanntes Mitglied
Ich habe irgendwo gelesen, das die Möglichkeit besteht nur die Positiven Zahlen eines byte zu benutzen und so auf den wert (+)255 zu kommen.

Aber mal so in den Raum gestellt.

besteht überhaupt die Möglichkeit einen int (bsp: 2006) in bytes darzustellen das ich nach der ausgabe wieder 2006 erhalt?
 

thE_29

Top Contributor
Code:
int number = 2006;
    byte low = (byte)number;
    byte high = (byte)(number >> 8);
    System.out.println("number: " + number + "  bitmask: " + Integer.toBinaryString(number));
    String tmpNumber = Integer.toBinaryString(low);
    tmpNumber = tmpNumber.substring(tmpNumber.length() -8);
    System.out.println("low: " + low + "  bitmask: " + tmpNumber);
    System.out.println("high: " + high + "  bitmask: " + Integer.toBinaryString(high)); 
    int new_number = high & 255; //zuerst die hohe Maske hinzuweisen
    new_number <<= 8; //dann 8 bits nach links verschieben
    new_number |= low & 255; //dann die low Maske hinzufügen
    System.out.println("new_number: " + new_number + "  bitmask: " + Integer.toBinaryString(new_number));

Ausgabe hat gesagt.:
number: 2006 bitmask: 11111010110

low: -42 bitmask: 11010110

high: 7 bitmask: 111

new_number: 2006 bitmask: 11111010110
 
B

Beni

Gast
Du kannst das byte vor der Ausgabe zurück in einen int verwandeln.
Code:
        for( byte x = Byte.MIN_VALUE; x < Byte.MAX_VALUE; x++ ){
            int y = x & 0xFF;
            System.out.println( x + " " + y );           
        }

Schlussendlich ist ein byte einfach mal 8 Bits, was sie bedeuten, kannst du selbst festlegen (du könntest ein Byte auch als ASCII-Zeichen anschauen...).
 

Dit

Bekanntes Mitglied
:toll:

ich denke das könnte mir schon weiter helfen wenn nicht sogar die Lösung sein.
vielen dank schon / erst mal
ich werde mal schauen ob das so funktioniert
 

Dit

Bekanntes Mitglied
Also das sieht schon mal gut aus!

besteht aber vielleicht noch die Möglichkeit aus den 2 byte einen byte[] zu machen?
dann hätte ich nur eine Zahl die ich abspeichern müsste (es handelt sich um Telegramme :( )


ABER NOCH MALS VIELEN DANK AN ALLE BETEILIGTEN!!!!!!!!!! :toll: :toll:
 

Dit

Bekanntes Mitglied
hehe

ich meinte eher einen array mit einem namen aber der die beiden werte high und low enthält

aber cool die antwort :lol:
aber müsste auch so gehen
 

thE_29

Top Contributor
Sind wir ein bisi Denkfaul?!

byte buf[] = new byte[2];
buf[0] = low;
buf[1] = high;

sowas?!
 

Dit

Bekanntes Mitglied
nope simma net!
ich muss nur zu geben das das ganze Binaer Zeug nicht mein Ding ist!
(da macht Oberflächendesign mehr spaß :lol: )

aber jetzt wo die Lösung gibst... ja ich muss zu geben da hätte ich auch drauf kommen können!
:D

danke!
 

Dit

Bekanntes Mitglied
ich könnt heulen :(

habe gerade festgestellt das nen short ja auch nur 2 byte hat!

mir hätte folgendes völlig gereicht:

Code:
public class Typumwandlung2 {
	public static void main (String[] args){
		int b = 1234;
		short a = (short) b;
		System.out.println(a);
		
	}
}

^^
so ist das... aber trotzdem.. gelernt habe ich was und das ist das wichtigste!! :###
 

Dit

Bekanntes Mitglied
ja nen short hat 2 bytes..
und meine Aufgabe war nen Int in 2 byte un zu wandeln
aber da mein Kollege das auch nicht besser wusste

setzte er sowas in die Welt : 16-Bit int to 2 8-Bit Bytes
er hätte auch sagen 4 byte in 2 byte.. :)
vielleicht wäre ich dann auf den short gekommen!

naja egal!
jetzt habe ich es ja! und du hast dich als guter Berater bewiesen :lol:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C BufferedReader/BufferedWriter schreibt nicht alle Bytes Allgemeine Java-Themen 2
V Input/Output Austausch von Bytes zwischen C# und Java Allgemeine Java-Themen 3
RalleYTN Input/Output Clip als ein Array von Bytes? Allgemeine Java-Themen 2
J Temperatur aus bytes auslesen. Allgemeine Java-Themen 13
Q Bytes verschwinden im CipherInputStream Allgemeine Java-Themen 1
L Methoden Methode gibt mir beim verschlüsseln mit RSA 0 bytes aus ? Allgemeine Java-Themen 1
J Bytes aus Socket lesen Allgemeine Java-Themen 9
Q Datentypen Short aus Bytes - Signed -> Unsigned? Allgemeine Java-Themen 9
C Datentypen int in bytes zerlegen und wieder zusammen setzen Allgemeine Java-Themen 13
K Hexadezimale Bytes Allgemeine Java-Themen 6
B bereits gelesene Bytes herausfinden Allgemeine Java-Themen 10
M FIFO Queue: bytes in, float/double/etc out Allgemeine Java-Themen 5
S String zu binary und zurück - Problem mit unsigned/signed bytes Allgemeine Java-Themen 2
TiME-SPLiNTER Von Unix, InputStreams und Null Bytes Allgemeine Java-Themen 2
K AES, Buffer und Bytes Allgemeine Java-Themen 2
S Bytes oder Hex-Werte zu Assembler Code? Allgemeine Java-Themen 6
L bytes nach int (little endian bitshift) Allgemeine Java-Themen 12
J Receive eines Hex-Bytes über COM-Port Allgemeine Java-Themen 4
G Zwei bytes vergleichen Allgemeine Java-Themen 2
M Bytes in Datei schreiben Allgemeine Java-Themen 10
T Spezielle Bytes in Datei schreiben Allgemeine Java-Themen 7
F Einlesen von Bytes Allgemeine Java-Themen 9
reibi Größe Array aus bytes Allgemeine Java-Themen 14
G RXTX verschicken einzelener Bytes Allgemeine Java-Themen 8
G WAV-Samples bearbeiten oder: 2 Bytes -> short -> float Allgemeine Java-Themen 5
T Größe eine Variablen in Bytes? Allgemeine Java-Themen 22
G Mehrere Bytes auf einmal einlesen Allgemeine Java-Themen 4
P int -> 4 bytes Allgemeine Java-Themen 11
R Menge an Bytes eines OutputStreams ermitteln. Allgemeine Java-Themen 6
R Wieviele Bytes gesendet Allgemeine Java-Themen 3
T Bestimmte bytes in einer Datei ersetzen? Allgemeine Java-Themen 4
H Objekte verbrauchen immer mindestens 16 Bytes Allgemeine Java-Themen 3
W Array größer als 65536 Bytes Allgemeine Java-Themen 7
A RandomAccessFile - Bytes vom Anfang der Datei löschen Allgemeine Java-Themen 32
C Code of a method longer than 65535 bytes Allgemeine Java-Themen 3
L 8 bytes von bestimmter position weg lesen? Allgemeine Java-Themen 11
D 2 Bytes in ein int convertieren Allgemeine Java-Themen 2
B Umwandeln von Bytes in float Zahl (DataInputStream) Allgemeine Java-Themen 3
G 0 Bytes bei temporäre Datei. Warum? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben