Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » 41. Virtual rästel (verstehen und golfizieren)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ] [ 5 ]
000
28.08.2003, 12:00 Uhr
virtual
Sexiest Bit alive
(Operator)


Hi,

Zeit fürs 41. Virtualrätsel:
Das folgende Programm sollte verstanden werden und danach golfiziert werden. In der golfizierten Version darf auf Fehlerbehandlung verzichtet werden, aber die Funktionalität muß ansonsten erhalten bleiben. Wie das Programm ansonsten aussieht sollte jeder für sich selbst entscheiden.

C++:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#include <string.h>

int main(
    int argc,
    char** argv)
{
    FILE* in = NULL;
    char buffer[16];
    size_t len;
    size_t offset = 0;
    size_t i;

    /*
     * Check parameters, open file
     */

    if (2 == argc)
    {
        in  = fopen(argv[1], "rb");
        if (NULL == in)
        {  
            fprintf(stderr, "error: %s: cannot open %s: %s.\n",
                    argv[0], argv[1], strerror(errno));
            exit(EXIT_FAILURE);
        }
    }else if (1 == argc)
    {  
        in = stdin;
    }else
    {
        fprintf(stderr, "error: %s: bad command line.\n"
                        "usage: %s [file]\n",
                argv[0], argv[0]);
        exit(EXIT_FAILURE);
    }

    /*
     * Loop to dump
     */

    do
    {
        len = fread(buffer, 1, sizeof(buffer), in);
        printf("%08x ", offset);
        offset += len;
        for(i=0; i<sizeof(buffer); ++i)
        {
            if (i<len)
            {  
                printf("%02x ", (unsigned char)buffer[i]);
            }else
            {  
                printf("   ");
            }
        }
        for(i=0; i<len; ++i)
        {
            if (isprint(buffer[i]))
            {  
                putchar(buffer[i]);
            }else
            {  
                putchar('.');
            }
        }
        putchar('\n');
    } while (len==sizeof(buffer));

    /*
     * check errors and cleanup
     */

    if (!feof(in))
    {
        fprintf(stderr, "error: %s: reading failed!\n", argv[0]);
        if (in != stdin)
        {
            fclose(in);
        }
        exit(EXIT_FAILURE);
    }
    if (in != stdin)
    {
        fclose(in);
    }

    return EXIT_SUCCESS;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 28.08.2003 um 12:01 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.08.2003, 12:51 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


sieht mir nach nem Hexeditor aus oder eher Hexviewer
Ist ne gute Idee
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 28.08.2003 um 12:51 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.08.2003, 13:31 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


so hier meine erste version
was ist eigentlich par?

C++:
main(int x,char**a){int i,b[16];FILE *f=x-1?fopen(a[1],"rb"):stdin;for(x=0;!feof(f);x+=16){printf("%08x ",x);for(i=0;i<16;i++)printf("%02x ",(b[i]=fgetc(f))>0?b[i]:0);printf("   ");for(i=0;i<16;printf("%c",b[i++]));printf("\n");}}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.08.2003, 13:55 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
Windalf postete
so hier meine erste version
was ist eigentlich par?


Grundsätzlich 1 Weniger als Deine jeweils aktuelle Lösung, würde ich vorschlagen!

--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 28.08.2003 um 13:55 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.08.2003, 13:58 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


das interpretier ich dann mal so das du inhaltlich nichts dran auszusetzen hast
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.08.2003, 13:58 Uhr
virtual
Sexiest Bit alive
(Operator)


@windalf:
Dein programm macht was anders als meines: es konvertiert nicht druckbar Zeichen nicht in einen Punkt, sondern macht unsinn.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.08.2003, 14:04 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Ich find meine Lösung besser

Aber ok ich schreib dir nen Patch wenn du drauf bestehst

C++:
for(i=0;i<16;i++)printf("%c",isprint(b[i])?b[i]:46);



so jetzt zufrieden?
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 28.08.2003 um 14:11 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.08.2003, 14:30 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
main(int x,char**a){int c,i,b[16];FILE *f=--x?fopen(a[1],"rb"):stdin;for(x=0;!feof(f);printf("\n")){printf("%08x ",x);for(i=0;i<16;x++)printf("%02x ",(c=b[i++]=fgetc(f))>=0?c:0);printf("   ");for(i=0;i<16;printf("%c",isprint(c=b[i++])?c:46));}}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
28.08.2003, 14:35 Uhr
virtual
Sexiest Bit alive
(Operator)


Naja, okay. dann vergessen wir auch noch das fclose...
Hat, wie ich glaube, noch ein wenig EInsparpotential...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
28.08.2003, 14:37 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Naja, okay. dann vergessen wir auch noch das fclose...


Nicht vergessen sondern vorsätzlich weggelassen
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ] [ 5 ]     [ Rätselecke ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: