# Datei to BitSet



## millinär (7. Aug 2006)

ich versuche ein proggramm zu schreiben mit das eine Datei in ein BitSet Umwandelt
aber die ausgabe ist nicht so wie sie sein sollte weis jemand woran das liegen könnte?


```
package dshack;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;
import java.math.*;



public class sts{
	//metode die ein byte in ein boolean Array umwandeln soll
	public static boolean[] btob(byte derbyte){

		boolean[] b=new boolean[8];
			for(int i=0;i<8;i++){
				b[i]=((derbyte & (1 << i)) == 1);
		}

return b;

	}
	//metode die ein byte Array in ein bit set umwandeln soll
public static BitSet batbs(byte[] b){
	int i2=0;
	BitSet bs=new BitSet();
	for(int i=0;i<b.length;i++){
boolean[] bl=btob(b[i]);
for(int i1=0;i1<bl.length;i1++){
	bs.set(i2,bl[i1]);
	i2++;
}
	}
	return bs;

}
 public static ByteArrayOutputStream bao;

 //metode die ein byte Array aus einer Datei lesen soll
public static byte[] readb(File f) {

  try {
      FileInputStream in = new FileInputStream(f);
   bao=new ByteArrayOutputStream();
      byte[] buf = new byte[4096];
      int len;
      while ((len = in.read(buf)) > 0) {
        bao.write(buf, 0, len);
      }
    bao.close();
      in.close();
    } catch (IOException e) {
      System.err.println(e.toString());
    }

	 return bao.toByteArray();

}
//soll ein BitSet als eine reihe von 0en und 1en ausgeben
public static void prbs(BitSet bs){
	for(int i=0;i<bs.length();i++){
		if(bs.get(i)){
			System.out.print(1);
		}
		else{
			System.out.print(0);
		}
	}
}

public static BitSet retb() throws Exception{
	Frame ff=new Frame();
ff.setVisible(true);
			JFileChooser chooser = new JFileChooser();
			chooser. setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
		chooser.showOpenDialog(ff);
	File fin=chooser.getSelectedFile();
	ff.dispose();
	return batbs(readb(fin));
}
public static void main(String[] args)throws Exception{
prbs(retb());
}
}
```


----------



## foobar (7. Aug 2006)

> aber die ausgabe ist nicht so wie sie sein sollte


Wie sieht die Ausgabe denn aus und wie sollte sie sein? Wofür soll das ganze überhaupt gut sein?


----------



## millinär (7. Aug 2006)

die ausgabe von meinem Programm :   000000000000000010000000100000001
so ist die ausgabe von einem hexeditor:0101010001100110100001110110011101100111

ich hab da so ein spiel und ich will den speicherstand verändern aber das spiel benutzt ein CRC
und den muss ich berechnen

habs jetzt

```
public static boolean[] btob(byte derbyte){

		boolean[] b=new boolean[8];
		  for(int i=0;i<8;i++){
			  int mask = 1 << i;
				  b[7-i]=(derbyte & mask) == mask;
		  }

return b;

	}
```


----------



## thE_29 (7. Aug 2006)

Du kannst das auch so schreiben


			b_= !((derbyte & (1 << i)) == 0);


Die Abfrage gibt dir halt immer den Maskenwert zurück wenn es genau dem entspricht! Aber 0 wenn es nicht so ist!_


----------



## millinär (7. Aug 2006)

thE_29 hat gesagt.:
			
		

> Du kannst das auch so schreiben
> 
> 
> b_= !((derbyte & (1 << i)) == 0);
> ...


_
hmm thx ich leider kein plan von so zeug weil ich nicht weis was "<<" bedeutet und von bits und bites sowieso keine ahnung habe

ist:! ((derbyte & (1 << i)) == 0);
das gleich wie:!((derbyte== 0 )& ((1 << i)== 0));_


----------



## foobar (7. Aug 2006)

> hmm thx ich leider kein plan von so zeug weil ich nicht weis was "<<" bedeutet und von bits und bites sowieso keine ahnung habe


Wer hat dann deinen Code geschrieben, der Weihnachtsmann?

<< bedeutet shift-left d.h die Bits werden um eine Stelle nach links verschoben, dadurch wird das Byte mit 2 multipliziert.

http://www.galileocomputing.de/open...sel02_007.htm#Rxx747java02007040000AE1F04E102


----------

