Datei to BitSet

Status
Nicht offen für weitere Antworten.

millinär

Bekanntes Mitglied
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?

Code:
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());
}
}
 

millinär

Bekanntes Mitglied
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
Code:
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

Top Contributor
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

Bekanntes Mitglied
thE_29 hat gesagt.:
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!

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));
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben