1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

C++ bild binär einlesen

Discussion in 'Programmieren' started by thedafelix, Jul 17, 2010.

Thread Status:
Not open for further replies.
  1. Hallo Leute,
    bin jetzt schon stundenlang am googlen krieg des aber nich so hin wie ich mir des vorstelle.
    Ich bin völliger c++ anfänger wollte aber jetzt nun ein programm schreiben dass ein bild einließt und in der Konsole oder in einem Textdokument die Binärdaten ausgiebt.
    Code:
    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <string.h>
    #include <fstream>
    
    using namespace std;
    
    int main(int argc, char* argv[]) 
    {
    
        unsigned int c;
        std::ofstream outfile;
        outfile.open("bild.txt" ,ios::binary);
        ifstream in("xyz.jpg" ,ios::binary);
        while(in) {
    	c=in.get();
    	outfile << c << std::endl;
        }
       
    	outfile.close();
    
    
        return 0;
    }
    
    Wenn ich dass jetzt aber ausführe bekomme ich zwar ziemlich viel text aber absolut keine 1 und 0 wie ich mir des vorgestellt hab.
    Meine Grundidee war nämlich den binär code eventuell zu verschlüsseln und nach dem entschlüsseln wieder ein Bild zu haben.
    Schon mal im Vorraus Danke fürs Lesen und/oder sogar antworten
    thedafelix
     
  2. Fettbemme

    Fettbemme Halbes Megabyte

    Hallo thedafelix

    Also mir ist nicht klar, was Du Dir vorgestellt hast, wenn Du ein Bild als Text ausgibst... :confused: ....was h&#228;ttest Du erwartet? Und wieso willst Du 0 und 1 sehen? Ein Textzeichen besteht i.d.R. aus 8 Bit. Wenn Du z.B. das Zeichen "A" auf dem Bildschirm hast, entspricht das dem Bin&#228;rwert 01000001, ach ja das Zeichen "0" w&#228;re &#252;brigens 00110000, und "1" 00110001. Schau mal unter ASCII :)

    Bildformate sind in der Regel wenn Du Dir die Bin&#228;rdaten anschaust nicht unbedingt erkennbar, was Du abgebildet hast. Je nach bildformat und Farbtiefe, hast Du f&#252;r einen bildpunkt mehr als 1 Byte, und viele Bildformate sind auch noch komprimiert.... Ich denke von Deiner Vorstellung bist Du gerade auf der Rolltreppe ins Nichts...

    Wie Du ja festgestellt hast, bekommst Du wenn Du den Inhalt Deiner Bild Datei als Text ausgibst nicht wirklich was sinnvolles auf dem Bildschirm. In der Regel macht es keinen Sinn Bin&#228;rformate auf als Text ausgeben. Du w&#252;rdest ja auch nicht eine EXE Datei als Text ausgeben wollen, obwohl z.B. im PE Header durchaus viele Infos drinstehen, die aber auch im Bin&#228;rformat sind. Sinnvoll w&#228;re es z.B. eine HTML Datei als Text auszugeben, da sieht man durchaus sinnvolles....
     
  3. Hascheff

    Hascheff Moderator

    Dazu musst du dir den Code nicht anschauen. Mach einfach und schau dir hinterher das Bild an.
     
  4. Also vielen Danke erstmal für eure Antworten.
    @Hascheff
    Ja des Problem is bloß dass meien Kenntnisse im C++ alles andere Als berauschend sind wenn ich also des Bild einlese dann bekomm ich wie mit Notepad allemöglichen Zeichen mit denen ich nichts anfangen kann. Die Verschlüsselungslibs die des Drauf hätten sind mir dann doch nen bisschen zu kompliziert von der Bedienung her. D glaub ich bleib ich eher erstmal bei weniger schweren Textverschlüssenlungen oder hättet ihr noch ne idee zu irgendeiner auch mir verständlichen Verschlüsselung.
    Eine Idee hätte ich noch weiß bloß nicht ob die so gut umzusetzen ist, ich könnte ja über system("") in der Linux-Shell openssl Kommandos ausführen rein von der Komplexheit(oder so) für den Benutzer geht des glaub ich.
    thedafelix
     
  5. diego2k

    diego2k Kbyte

    binär Datein bestehen aus bytes ... und bytes bestehen aus bits..
    wenn du eine Datei binär einlesen willst und die bits ausgeben, musst du jedes einezlenen char(byte) der datei in einen int casten und mit 1, 2, 4, ... 128 UND verknüpfen dadurch bekommst du die stellen der 1er und 0er raus.

    10101
    00001 AND
    =erste stelle ist 1
    10101
    00010 AND
    = zweiter stelle ist 0
    usw


    eine direkte Ausgabe von Byte in 1 und 0 ist nicht möglich ...
    1 ist ein ascii und sieht in bits eigentlich so aus: 10101

    Hier ein kleiner Code der das machen sollte, allerdings hab ich nicht probiert ob er kompiliert. Fallst damit Probleme hast kannst ja noch rein-Posten:
    PHP:
    #include <iostream>
    #include <fstream>

    int myRead(std::string filename)
    {

      
    std::ifstream::pos_type size;
      
    char mem;

         
    std::ifstream file(&filename[0],  std::ios::in |  std::ios::binary |  std::ios::ate);
          if (
    file.is_open())
          {
            
    size file.tellg();

            try{
              
    mem = new char [size];
              
    file.seekg (0std::ios::beg);
              
    file.read (memsize);
              
    file.close();
            }
            catch(
    std::bad_alloce)
            {
              throw 
    std::bad_alloc();
            }catch(...)
            {
              
    delete[] mem;
              return -
    1;
            }
            
            for( 
    int i=0i<size;i++){
              
    int bindata = (int)mem[i];
              
                for(
    k=1k<=128;k*=2){
                  
    int ausgabe =0;
                  (
    bindata k)?ausgabe =1:ausgabe =0
                  
    std::cout << ausgabe << std::endl;                    
                }
            }
            
    delete[] mem;
            return 
    0;
          }

        return 
    2;
    }
     
Thread Status:
Not open for further replies.

Share This Page