binär in hex umwandel



  • hallo
    habe eine frage:
    wie kann ich in einem string sich befindende binäre zeichen in hex zeichen umwandeln?



  • Du kannst z.B. den string mittels printf und dem format specifier %x in hex ausgeben lassen.



  • funktioniert irgendwie nicht

    #include <stdio.h>

    #define BUF 100

    void main()
    {
    FILE *pfile;
    char dateiname[62];
    char line[BUF];

    printf ("Bitte geben Sie den Dateipfad der zu Oeffnenden Datei ein:\n");
    scanf ("%61s", dateiname);

    pfile = fopen (dateiname, "rb");
    if (!pfile)
    {
    printf("\nFEHLER: Die angegebene Datei kann nicht gefunden werden!\n");
    system("PAUSE");
    return;
    }
    else printf("\nDie Datei wurde erfolgreich geoeffnet!\n");

    while(fread(line,BUF,1,pfile)!=0)
    {
    printf("%x", line);
    }

    system("PAUSE");
    }

    im dos fenster erscheint immer nur derselbe wert: 22fe8022fe8022fe80...
    egal was ich für eine datei oeffne.



  • So kann das nicht funktionieren. Mit dem %x Platzhalter kannst du integer in Hexadezimaler Schreibweise anzeigen. So könntest du das machen:

    char str[BUF];
    
    //...
    // In str steht jetzt etwas wie 10100110010\0....
    
    int Pos = 0;
    int Ergebnis = 0;
    int temp = 1;
    while(str[Pos]=='1'||str[Pos]=='0')Pos++; // Nullterminierungszeichen suchen
    
    for(int i=1;i<=Pos;i++)
    {
        if(str[Pos-i]=='1')Ergebnis+=temp;
        temp*=2;
    }
    
    //Ergebins ist die Zahl im Dezimalsystem
    
    printf("Hex: %X",Ergebnis); // Hexadezimal ausgeben
    

    Hoffe, ich konnte dir damit weiterhelfen.

    MfG, Jochen



  • Wenn man auf seine Frage keine zufriedenstellende Antwort bekommt, einfach mal unter leicht geändertem Namen und leicht geändertem Titel die leicht veränderte Frage nochmal stellen, vielleicht findet sich dann einer 😃

    char c;
    while( 1==fread(&c,1,1,pfile) )
      printf("%02X", (int)c);
    

    sollte wohl das umsetzen, was du meinst.



  • Oh, da hab ich es mir ja unnötig kompliziert gemacht 😃


Anmelden zum Antworten