2 Bytes in 1 Short zusammenfügen

Anime-Otaku

Erfahrenes Mitglied
Hallo,

ich habe momentan das Problem, dass ich 2 Byte zahlen habe, welche aus einer binär Datei ausgelesen werden.

Die zwei Bytes sehen so z.B. aus:
11111111
11011000

Danach soll ein short rauskommen was intern so aussieht:
11111111 11011000

Irgendwie steh ich gerade nämlich auf dem Schlauch, wie man die Zusammenbekommt inklusive Vorzeichen.

Vielen Dank schonmal im voraus
 
Hi,
eins vorweg kann ich dir gleich sagen: Wenn du die Zahl so in ein Short speicherst, dann wird dies nicht funktionieren, weil er die Zahl nicht als Dualzahl betrachtet.
 
Moin!
Getestet hab ich das jetzt nicht, aber wie wärs es damit?
Code:
short i = ((short)((new Byte(Byte.parseByte("1000001",2)).intValue() << 8) + new Byte(Byte.parseByte("0000001",2)).intValue()));

*grüssle*
MeinerEiner
 
Leider geht das so nicht...:
Java:
byte b2 = -1;
byte b1 = -40;
short i = (short)((b2<<8)+(b1));

Da stimmt dann irgendwie das letzte bit des vorderen Bytes nicht.

(das Umdrehen der bytes liegt am Endian)

Update:

Ich hab nun über nen hack Weg gemacht:
Java:
		byte b2 = -1;
		byte b1 = -40;
		String binb1 = Integer.toBinaryString(b1);
		String binb2 = Integer.toBinaryString(b2);
		while(binb1.length()<8) {
			binb1.insert(0, '0');
		}
		while(binb2.length()<8) {
			binb2.insert(0, '0');
		}


		String reString = binb2.substring(binb2.length()-8)+binb1.substring(binb1.length()-8);
		int dummy = Integer.parseInt(reString,2);
		short test = (short) dummy;
 
Zuletzt bearbeitet:
Hallo,

das was du da hast passt nicht mehr in einen short...
schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Thomas.Darimont
 *
 */
public class BytesToShortExample {

  /**
   * @param args
   */
  public static void main(String[] args) {
    byte b0 = -1;
    byte b1 = -40;
    
    System.out.println(Integer.toBinaryString(((int)b0) & 0xFF));
    System.out.println(Integer.toBinaryString(((int)b1) & 0xFF));
    
    int s = (((int)b0) << 8 | b1) & 0xFFFF;
    System.out.println(s);
    System.out.println("Expected: 1111111111011000");
    System.out.println("Actual:   " + Integer.toBinaryString(s));
  }

}

Ausgabe:
Code:
11111111
11011000
65496
Expected: 1111111111011000
Actual:   1111111111011000

Gruß Tom
 

Neue Beiträge

Zurück